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

C语言中100个整数中随机选取10个不同的整数如何实现?
用srand/rand函数.
谢谢
选十个不同的数,一定要是不同的数.logo0755写的挺详细的,可惜还是会产生相同的随机数,估计只能加循环判断了.

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

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

示例代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
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,
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-06-08

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

    例程:

    #include <stdio.h> 
    #include <stdlib.h> 
    #include <time.h> 
    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; 
    }

第2个回答  2020-01-31
首先要确定这100个数的范围,比如0-99。
然后抽取随机数,并利用模除限定范围,每当抽取到一个新的数时,同历史数据比较,如果有重复则放弃。
直到抽取到不重复的10个数为止。
示例代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
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,
第3个回答  2007-04-24
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

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 <stdlib.h>
#include <time.h>
#include <stdio.h>

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;
}本回答被提问者采纳
第4个回答  2007-04-24
int cnt=0;
for(cnt=0;cnt<10;cnt++)
{
i=rand();
printf(i);
}
大概就是这样了,剩下的自己完成吧。

解答完毕。。。

C语言中100个数中随机选取10个不同的数如何实现?
首先要确定这100个数的范围,比如0-99。然后抽取随机数,并利用模除限定范围,每当抽取到一个新的数时,同历史数据比较,如果有重复则放弃。 直到抽取到不重复的10个数为止。示例代码如下:include <stdio.h>#include <stdlib.h>#include int main(){ int a[10]; \/\/ 存储结果。 int i,...

如何用c语言实现:定义一个1~100的int数组,随机从里边选择十个数字?
printf("输入元素个数");scanf("%d",&m);for(i = 0; i<m; ++i)scanf("%d",&a[i]);p=m;} void display(int *a, int *p){ int i;for(i = 0; i < *p; ++i)printf("%5d",a[i]);printf("\\n");} void main( ){ int a[10],n=0,m;do{ printf("1,输入数组\\n...

C语言随机数组中自然数的前100项中抽取10项由大到小排序
int main(){ int a[10] = {0};int i, j, t;\/\/产生1~100的随机数(10个)srand(time(NULL));for(i = 0; i < 10; i++){ a[i] = rand() % 100 + 1;} \/\/从小到大排序 for(i = 0; i < 9; i++){ for(j = i + 1; j < 10; j++){ if(a[i] < a[j])...

怎样用C语言生成10个1到100的不重复的随机数?
} for(int i=0;i<10;i++)printf("%d ",a[i]);} 希望我的回答对你有帮助!

从1到100间随机产生不同的10个整数怎么做?谢谢
c语言用Rand函数 for(i=0;i<10;i++)printf("%d",rand()%100);不过,rand函数生成的不是绝对的随机数,而是伪随机数,因为这个程序每次生成的数列都是完全一样的。想做到完全随机,基本上不可能。

c语言生成10个不重复的随机整数,并输出
+ min; \/*产生min~max的随机数*\/}\/*打印数组*\/void printArr (elemType arr[], int len) {int i;for (i=0; i<len; i++)printf ("%d\\t",arr[i]);putchar ('\\n');}int main (void) {elemType arr[LEN];int len = 10; \/*10个随机数*\/randomArray (arr, len,...

c语言怎么实现随机生成10个数字
电脑、C语言编译器。1、首先,打开C语言编译器,新建一个初始.cpp文件,例如:test.cpp。2、在test.cpp文件中,输入C语言代码:for (int i = 0; i < 10; i++)printf("%d ", rand() % 100 +1);3、编译器运行test.cpp文件,此时成功通过rand产生了10个1-100内的整数。

用C语言实现: 对编号为1~100的100个人进行随机分组,一共分为10组,每 ...
))%100)int group[100],i,j,k,p;int member[10][10],members[10];int main(){for(i=0;i<100;i++)group[i]=i;srand(time(NULL));for(j = R + 100;j--;){i=R;k=R;p=group[i];group[i] = group[k];group[k] = p;}for(i=0;i<100;i++){member[group[i]...

c语言怎么生成随机数?
你好!完整的代码,红圈处就是从上面100个数字中抽取到的数字:include <stdio.h>#include<stdlib.h> \/\/生成随机数用 #include \/\/利用时间生成种子 #include<math.h> int main(){ int i; int a[100]; srand( time(NULL) ); \/\/生成种子 for(i=0;i<100;i++) ...

C语言中随机产生10个100之内的整数,然后按从大到小的顺序排列并输出。以...
在缺省括号时if语句默认执行到其后第一个分号时结束。所以用括号将t=a[i];a[i]=a[j];a[j]=t;括起就可以保证这三句代码是在条件语句内执行。建议你养成良好的编程习惯,在编写代码时最好不要随便省略括号,哪怕括号里只有一句代码。同时你这个代码层次不清楚,学下“ 路一直都在吗 ”的代码...

相似回答