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

C语言中100个整数中随机选取10个不同的整数如何实现?用srand/rand函数.谢谢选十个不同的数,一定要是不同的数.logo0755写的挺详细的,可惜还是会产生相同... C语言中100个整数中随机选取10个不同的整数如何实现?
用srand/rand函数.
谢谢
选十个不同的数,一定要是不同的数.logo0755写的挺详细的,可惜还是会产生相同的随机数,估计只能加循环判断了.
展开
 我来答
风若远去何人留
2015-06-08 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450129
专业C/C++软件开发

向TA提问 私信TA
展开全部

首先要确定这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,
tattackor
2015-06-08 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:887万
展开全部
  1. 算法:使用srand/rand产生0~99的随机数作为随机选取的数组下标;用一个布尔型数组来判断当前下标是否被使用过;一直到选出10个为止。

  2. 例程:

    #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; 
    }
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
廉玉荣妙珍
2020-01-31 · TA获得超过3827个赞
知道大有可为答主
回答量:3164
采纳率:30%
帮助的人:215万
展开全部
首先要确定这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,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友ec167ac34
2007-04-24 · TA获得超过1788个赞
知道小有建树答主
回答量:1312
采纳率:0%
帮助的人:1161万
展开全部
#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;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Seraphim_L
2007-04-24 · TA获得超过391个赞
知道答主
回答量:205
采纳率:100%
帮助的人:153万
展开全部
int cnt=0;
for(cnt=0;cnt<10;cnt++)
{
i=rand();
printf(i);
}
大概就是这样了,剩下的自己完成吧。

解答完毕。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式