>凡事网 导航

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

2024-07-04m.fan-pin.com
~

刚调试了下,弄不明白的是,为什么SZ[10]明明不存在却永远是产生的r对应输出的数。。。

费解呀。但好像用9来说应该会更规范一些。

最后都沉底了。

 

 

 

 

。。。。又研究了20分钟,终于弄懂了。。。实际上应该是9更标准一些,虽然10不会溢出。。。rang()%(10-i)第一个从0-9里选,然后选过的消失。。。最后一个为9

第二次从0-8里选,选过的消失。。。最后2个为9,以后永远都选不上第8和第九。无论9出没出现过,以此类推。最终全部为九,其余消失。

 

 

如果为10的话,其实也影响不了,因为最后几个数永远都不会取到、

 

 

采纳了吧。。。。。。

 

 

额,其实最标准的应该把那个地方改成9-i,把没选的数字往前推,但是已经出现的过的就不必推了。。。



这个建议用经典的洗牌算法。

循环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].

 



就是10,自己看吧!!!不会溢出的说!!!9+1=10,而数组长度是10,不会溢出的,至于你问的不重复,用srand产生种子不会重复吧!!!至少我用这个没重复过!!!

如果是j<10,sz[j+1]会有sz[10]这一元素;
同志,没看到吧

会溢出,地址都越界了

C语言如何产生不重复的随机数
rndnum[N];int n;int i,j;srand((unsigned)time(0));for(i=0;i<N;i++){ while(1){ n=a[rand()%52];for(j=0;j<=i;j++){ if(n==rndnum[j])break;} if(j>i){ rndnum[i]=n;break;} } } for(i=0;i<N;i++){ printf("%d ",rndnum[i]);} return 0;} ...

C语言中,主函数中调用一个随机数函数,保证每次产生的随机数不重复,该如...
其实只要做一次种,然后再调用rand()就能产生不同的结果了,不用每次调用rand()之前都用srand()做种的 也就是说你那个程序可以改为 srand(time(0));for(a=0; a<200; a++){ \/* Two adjacent values of random numbers must be different *\/ R=rand()\/(RAND_MAX+1.0);b=int(R*num) ...

用c语言编程生成不重复的随机码时,怎么才能保证不重复呢?
include <stdlib.h> include <stdio.h> include int main(void){ int i,j,a[10][10];float sum=0,aver,b[10];srand((unsigned) time(NULL));printf("Ten random numbers from 0 to 99\\n");for(i=0;i<10;i++)for(j=0;j<10;j++)a[i][j]=rand()%90+10;for(i=0;i<1...

请问用C语言怎麼产生1至64的随机数?而且不重复的?
include <stdio.h>#include <stdlib.h>#include int main(int argc,char *argv[]){const int n=64;int a[n]={0}; \/\/结果存储在该数组中int b[n]={0};int count=0;srand(time(NULL));int num;while(count<n){num=rand()%64+1;if(b[num-1]==0){b[num-1]=1;a[count]=n...

...产生0到19的随机函数,在数组中存放上不重复的15 个
include <stdio.h> include <stdlib.h> int main(){ int i,j,x,m,n=0;int a[15];for (i=0;i<15; ){ m=0;x=rand()%20; \/\/产生区间[m,n]之间的随机整数 用公式(rand%(n-m+1)+m)a[i]=x;for (j=0;j<i;j++){ if(a[i]==a[j]){ m=1;break;} } if(m...

C语言编程,如何输入两个正整数,输出其中不是共有的数字?
同一数字不重复输出。输入样例:10 3 -5 2 8 0 3 5 -15 9 10011 6 4 8 2 6 -5 9 0 100 8 1输出样例:3 5 -15 6 4 1 我的想法是先拿A数组去跟B数组比一遍,然后再反过来比一遍,把不是共有的数放到C数组中,最后消去数组C中相同的数输出,这样输出的就不会存在同一个数了 ...

设计一个C语言程序,输入0 100内的5个整数,将这5个数按从大到小顺寻输...
scanf("%d",arr);for(i=1;i<5;i++){ scanf("%d",arr+i);if(arr[i]>arr[i-1]){ t=arr[i];for(j=i-1;j>=0&&t>arr[j];j--)arr[j+1]=arr[j];arr[j+1]=t;} } printf("按从大到小排序后是:");for(i=0;i<5;i++)printf("%d%c",arr[i],i==4 ? '\\n...

c语言编程 0到9十个数,排列出不重复的三位数有些?
include "stdio.h"int main(){ int a,b,c;\/\/a百位数字,b十位数字,c个位数字 for(a=1;a<=9;a++)for(b=0;b<=9;b++)for(c=0;c<=9;c++)if(a!=b && b!=c && a!=c)printf("%d\\t",a*100+b*10+c);printf("\\n");} 结果还有很多 ...

c语言十个数字互不相等的问题。。。
if(b==0) continue; c=x\/100; if(c==0) continue; if((a!=b)&&(a!=c)&&(b!=c)) { array[n]=x; n++; } } printf("\\n所有不重复的两个三位数相加仍为一个不重复的三位数如下所示:\\n"); for(x=0;x<n;x++) { for(y=x+1;y<...

好!我想问下 就是C语言随机数的问题
\/\/你就是想产生一个不重复的随机的1-10的序列吧 include<stdio.h> include<stdlib.h>\/\/标准工具库,要用到其中的rand()include\/\/时间库,要用到里面的时间来做随机数的种子 int main(void){ srand(time(NULL));\/\/srand是设计随机数的种子,作用是使每次产生的随机数不一样,time(NULL)返回当...

相关链接2

返回顶部
凡事房车自主流
凡事网