C语言中100个数中随机选取10个不同的数如何实现?
C语言中100个整数中随机选取10个不同的整数如何实现?用srand/rand函数.谢谢选十个不同的数,一定要是不同的数.logo0755写的挺详细的,可惜还是会产生相同...
C语言中100个整数中随机选取10个不同的整数如何实现?
用srand/rand函数.
谢谢
选十个不同的数,一定要是不同的数.logo0755写的挺详细的,可惜还是会产生相同的随机数,估计只能加循环判断了. 展开
用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,
展开全部
算法:使用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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先要确定这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,
然后抽取随机数,并利用模除限定范围,每当抽取到一个新的数时,同历史数据比较,如果有重复则放弃。
直到抽取到不重复的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,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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;
}
#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;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int cnt=0;
for(cnt=0;cnt<10;cnt++)
{
i=rand();
printf(i);
}
大概就是这样了,剩下的自己完成吧。
解答完毕。。。
for(cnt=0;cnt<10;cnt++)
{
i=rand();
printf(i);
}
大概就是这样了,剩下的自己完成吧。
解答完毕。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询