我有一个带零的数组。我想插入一些元素,特别是每行添加2个元素。
我想这样做如下:
假设我有一个3x3的零数组。我使用2d数组作为1d。
如果我记下行主要订单,我有:
index : 0 1 2 3 4 5 6 7 8
elements: 0 0 0 | 0 0 0 | 0 0 0
所以,我正在增加指数i + 2.
所以,我这样做了:
for (int i=0;i<rows;i++){
for (int j=0;j<col;j++){
int count=0;
for (int ind=0;ind<rows*col;ind++){
A[ind]=(double)(rand()%10+1.);
count++;
if (count==2){
ind+=i+col;
count=0;
}
}
}
}
有没有更好的方法可以在不使用矢量或类似的情况下执行此操作?
此外,我现在正在特定位置添加元素。有没有办法在不使用“shuffle”和类似的,或者没有办法的情况下在随机位置添加它们?
答案 0 :(得分:2)
#include <stdio.h>
int main(){
int a[3][3] = { 0 };
int *A = &a[0][0];
int row, col;
int i,j;
row = col = 3;
for(i = 0; i<row; ++i){
int pos = rand() % col;
for(j = 0; j< col ;++j){
if(j != pos)
a[i][j] = rand()%10 + 1;
}
}
for(i = 0;i<row*col;++i)
printf("%d ", A[i]);
printf("\n");
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void swap(int *a, int *b){
int temp = *a;
*a = *b;
*b = temp;
}
void selectPos(int range, int num, int pos[num]){
int i, position[range];
for(i=0;i<range;++i){
position[i]=i;
}
for(i=0;i<num;++i){
int n = rand()%range;
pos[i] = position[n];
swap(&position[--range], &position[n]);
}
}
int main(){
int a[3][5] = { 0 };
int *A = &a[0][0];
int row, col;
int i,j;
row = 3;
col = 5;
srand(time(NULL));
for(i = 0; i<row; ++i){
int pos[3];//Determine the position this 3 out of 5
selectPos(col, 3, pos);
for(j = 0; j< 3 ;++j){
a[i][pos[j]] = rand()%10 + 1;
}
}
for(i = 0;i<row*col;++i)
printf("%d ", A[i]);
printf("\n");
return 0;
}
答案 1 :(得分:1)
哦!你有太多的循环。对于您的技术,在count == 2
到ind++
时,内部循环和更新(或更正)额外增加就足够了。这将始终初始化一行中的前两个元素,并保持第三个元素不变。
当然,您可以连续初始化2个随机值。从全零矩阵开始。然后遍历每一行。从0, 1, 2
中选择一个随机列并设置其值。接下来,再次选择,直到您选择的列不为零。在该列设置值。这是有效的,因为随机值总是不等于零。
当然,您必须将数组编入索引,如i * col + j
。 (顺便说一句:如果你的代码中有两个相似的变量,一个名为rows
,请不要只调用另一个col
.-这会令人困惑。)
答案 2 :(得分:0)
首先,也许你应该定义一个3x3数组:int A [3] [3];
但是如果你真的只想要一个暗淡的数组:int A [9];
您当然可以在代码中定义一组规则(通过您访问和写入它的方式),以便将其视为3x3。但你真正需要做的就是:
int i, A[9];
srand(clock());
for(i=0;i<sizeof(A)/sizeof(A[0]);i++)
{
A[i] = rand();//using integers here, you can change it back to double
}
如果由于某种原因想要增加2,请将for循环行更改为:
for(i=0;i<sizeof(A)/sizeof(A[0]);i+=2)