C语言中100个数中随机选取10个不同的数如何实现?

2024-12-16 02:54:55
推荐回答(5个)
回答1:

首先要确定这100个数的范围,比如0-99。

然后抽取随机数,并利用模除限定范围,每当抽取到一个新的数时,同历史数据比较,如果有重复则放弃。 直到抽取到不重复的10个数为止。

示例代码如下:

#include 
#include 
#include 
int main()
{
    int a[10]; // 存储结果。
    int i, j;

srand(time(NULL));//通过获取时间值来设定随机数种子,以保证每次运行结果不同。
for(i = 0; i < 10; )//注意,第三项留空,因为需要判断每次得到的数值是否重复,如重复则不进行i的自加
{
a[i] = rand()%100; //得到一个0-99中的随机数。
for(j = 0; j < i; j ++)
if(a[j] == a[i])break;//发现重复,结束内循环

if(j == i) i ++;//如果i和j相等,代表内循环是达到条件退出的,即不是通过break,也就是没有重复项。
}

for(i = 0; i < 10; i++) //输出得到的数值。
printf("%d,", a[i]);
printf("\n");

return 0;
}

以下是运行该程序三次分别得到的结果(每行一次),可以看到是实现了所有功能的。

96,84,85,30,29,97,92,51,38,81,
49,42,13,18,24,1,75,91,60,5,
68,16,23,79,17,59,83,82,34,70,

回答2:

  1. 算法:使用srand/rand产生0~99的随机数作为随机选取的数组下标;用一个布尔型数组来判断当前下标是否被使用过;一直到选出10个为止。

  2. 例程:

    #include  
    #include  
    #include  
    int a[100],b[100],i,j;
    int main() {
      for(i=0;i<100;i++)a[i]=i;    //生成100个不同的数,这里直接用a[i]=i; 
      srand((unsigned)time(0));     //设置随机种子
      for(i=0;i<10;){
        j=rand()%100;        //随机选取一个0-100内的下标
        if(b[j]==0){        //当这个下标的数未被选中时,输出
            printf("%d ",a[j]);
            b[j]=1;
            i++;
        } 
      } 
     return 0; 
    }

回答3:

首先要确定这100个数的范围,比如0-99。
然后抽取随机数,并利用模除限定范围,每当抽取到一个新的数时,同历史数据比较,如果有重复则放弃。
直到抽取到不重复的10个数为止。
示例代码如下:
#include
#include
#include
int main()
{
int a[10]; // 存储结果。
int i, j;
srand(time(NULL));//通过获取时间值来设定随机数种子,以保证每次运行结果不同。
for(i = 0; i < 10; )//注意,第三项留空,因为需要判断每次得到的数值是否重复,如重复则不进行i的自加
{
a[i] = rand()%100; //得到一个0-99中的随机数。
for(j = 0; j < i; j ++)
if(a[j] == a[i])break;//发现重复,结束内循环
if(j == i) i ++;//如果i和j相等,代表内循环是达到条件退出的,即不是通过break,也就是没有重复项。
}
for(i = 0; i < 10; i++) //输出得到的数值。
printf("%d,", a[i]);
printf("\n");
return 0;
}
以下是运行该程序三次分别得到的结果(每行一次),可以看到是实现了所有功能的。
96,84,85,30,29,97,92,51,38,81,
49,42,13,18,24,1,75,91,60,5,
68,16,23,79,17,59,83,82,34,70,

回答4:

#include
#include
#include

int main(int argc, char* argv[])
{
int count=100;
srand((unsigned)time(0));
for(int i=0; i<10; ++i)
{
printf("%d\n",(1+(int)(count*(double)rand()/RAND_MAX+1)));
}

return 0;
}
//嗯是有重复了.回去研究了一下.重写了.我测试了一下.有时候还会有重复了.
#include
#include
#include

int main(void)
{
int a[100]={0};
time_t t;
srand((unsigned)time(&t));
for(int i=0;i<10;++i)
{
a[i]=rand()%100;
printf("a[%d]=%d\n",i,a[i]);
}

return 0;
}

回答5:

int cnt=0;
for(cnt=0;cnt<10;cnt++)
{
i=rand();
printf(i);
}
大概就是这样了,剩下的自己完成吧。

解答完毕。。。