永发信息网

如何用C语言产生不重复的0到9之间的随机数

答案:4  悬赏:80  手机版
解决时间 2021-03-27 14:24
如何用C语言产生不重复的0到9之间的随机数
最佳答案
刚调试了下,弄不明白的是,为什么SZ[10]明明不存在却永远是产生的r对应输出的数。。。


费解呀。但好像用9来说应该会更规范一些。
最后都沉底了。

 
 
 
 
。。。。又研究了20分钟,终于弄懂了。。。实际上应该是9更标准一些,虽然10不会溢出。。。rang()%(10-i)第一个从0-9里选,然后选过的消失。。。最后一个为9
第二次从0-8里选,选过的消失。。。最后2个为9,以后永远都选不上第8和第九。无论9出没出现过,以此类推。最终全部为九,其余消失。
 
 
如果为10的话,其实也影响不了,因为最后几个数永远都不会取到、
 
 
采纳了吧。。。。。。
 
 
额,其实最标准的应该把那个地方改成9-i,把没选的数字往前推,但是已经出现的过的就不必推了。。。
全部回答
就是10,自己看吧!!!不会溢出的说!!!9+1=10,而数组长度是10,不会溢出的,至于你问的不重复,用srand产生种子不会重复吧!!!至少我用这个没重复过!!!

这个建议用经典的洗牌算法。
循环100次(或者更多次),随机的将两个牌交换位置
程序如下:
 
void main(){  
 int sz[10]={0,1,2,3,4,5,6,7,8,9};
 int i,j, k, swap;


 for(k = 0;k<100;k++)
 {
      i = rand()%10;  j = rand()%10;
      if(i!=j)  {   swap = sz[i];   sz[i]=sz[j];   sz[j]=swap;  }
 }


 for(i = 0;i<10;i++)
 {
      printf("%d ",sz[i]);
 }
}
 
另外,如果按照你的算法的话,应该是改为9,你的担心是正确的,这儿确实发生了越界。
不信你到最后把sz全部打印出来,就会发现里面的数字全部是垃圾数据了。(也就是越界访问了sz[10].
 
如果是j<10,sz[j+1]会有sz[10]这一元素;
同志,没看到吧
会溢出,地址都越界了
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
安徽的地方戏有哪些
中性土放多少沙子适合种竹子
6x一35=13解方程并检验
①光线以明亮为好,小屋的光线是明亮的,因为
此邮票价值一共四张
网游小说是什么意思
你好,王总。请问你们总监岗位的薪酬大概是多
陕西有什么好茶?什么茶名气大一点?
今年2000根一斤冬虫夏草价格是多少
七开头的成语有那些
义乌库存市场在哪里
春天东南风阵雨23度钓鱼
2ff卡剪成4ff能用吗
冷嗖嗖的嗖怎么写
关于藤椒和麻椒
推荐资讯
查询美国EB-5移民项目的合法性
开油罐车多少钱一个月
〔求解〕LOL需要多少的网速才会不卡
河南省南阳市红泥湾乡上和庄村属于哪个区
微商总仓是什么意思
dreamhigh2中跳b级人生的是第几集
摇头,dj,诶呀我去叫什么?
指甲有血丝是怎么回事
“乌漆麻黑”算是成语吗
cad选择对象完对象后输入命令后又得重新选择
火车冬天比夏天慢
类似与ilomoyou的调调的英文歌那是什么名字?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?