读书人

简单有关问题高分相达。

发布时间: 2012-03-18 13:55:39 作者: rapoo

简单问题高分相达。。。。。
关于随机函数


想产生10个不同的9位数(范围在10000~~999999999之间)。要求每次产生的数字都不重复。。。。


请用C语言实现!!


-----------
小弟查了相应资料,发现C语言库函数中只有一个能满足int型数据的随机函数。但9位数已经超出了int型数据的范围。。所以特来赐教!!!

[解决办法]
9位是吧,可以产生两个随机数拼起来啊.
[解决办法]
ls好方法
[解决办法]
我 说下一个复杂点的思路
rand()%10; 可以产生一个数字
产生9个就行了 注意如果第一个是0的话 重新生成

然后再循环10次 就可以生成10个数了

srand(time 0); 可以满足每次随即的数字都不同
[解决办法]
int issame(char *pS,int m,int n,int i)
{
char *p=pS;
for(int k=0;k <i;k++)
{
if(strcmp(p[i],p[k])==0)
return 0;
}
return 1;
}

void rand9()
{
char r[10][10]={ " ", " ", " ", " ", " ",
" ", " ", " ", " ", " "
};
long a[10],temp;

for(int i=0;i <10;i++){
for(int j=0;j <10;j++)
{
int t=rand()%10;
strcat(r[i][j],t);
}
if(issame(r,10,10,i))
i--;
}

}
[解决办法]
ls的issame函数应加判首位为0
[解决办法]
strcat(r[i][j],t); 这个语句 明显不对啊
[解决办法]
直接在框里写的,没试
修改下:
if(t==0){
j--;
continue;
}
strcat(r[i],t);
[解决办法]



#include "stdio.h "
#include "stdlib.h "
#include "time.h "

typedef char int9[9];

void print_int9(int9 n)
{
int i = 0;
int f = 0;

while (i < 9)
{
if (n[i] != '0 ')
f = 1;

if (f == 1)
printf( "%c ", n[i]);

i++;
}
}

void rand_int9(int9 n)
{
int i = 0;
while (i < 9)
n[i++] = (rand() % 10) + '0 ';
}

int check(int9* an, int len, int9 n)
{
int i = 0;
while (i < 9)
{
if (n[i] != '0 ')
break;
i++;
}

if (i > 4)
return 0;

i = 0;
while (i < len)
{
if (strcmp(an[i], n) == 0)
return 0;
i++;
}

return 1;

}

int main()
{
int9 an[10];
int i = 0;

srand(time(0));
while (i < 10)
{
rand_int9(an[i]);
if (check(an, i, an[i]) == 0)
continue;
i++;
}

for (i = 0; i < 10; i++)
{
print_int9(an[i]);
printf( "\n ");
}

return 0;
}
[解决办法]

乱来的 - -


[解决办法]
:)


------解决方案--------------------


想产生10个不同的9位数(范围在10000~~999999999之间)。要求每次产生的数字都不重复。。。。
----------------------------------------
我的想法不同,不就是要9位不同的数字吗?直接读取系统时间(时,分,秒,毫秒,正好9位数字)用这写数据组成一个数组,同一天内不可能出现相同的.
[解决办法]
strcat(r[i],itoa(t))

读书人网 >C语言

热点推荐