
//正好我在做一个抽奖程序,有一段随机数去重代码,你可以借鉴一下。
//这种算法比较节省空间(至少我是这么觉得)
//用一个unsigned int型变量,记录已生成的随机数,代码如下
#include <reg51h>
#include<stdlibh>
unsigned int random = 0x00;
unsigned char nums[10] = {0};
void myrand()
{
unsigned char temp,i;
for(i=0;i<10,++i)
{
temp=rand();
if((random>>temp)&0x01==0x00)
nums[i]=temp;
}
}
//你根据你的需求改吧,求采纳。
#include <stdioh>
#include <stdlibh>
#include <timeh>
int main(int argc, char argv[])
{
int i,number,s[100],count=0;
srand((unsigned)time(NULL));
for(i=0;i<100;i++)
{
s[i]=0;
}
while(1)
{
int c;
c=getche();
if(c=='q') //如果按键为q字符则退出
{
break;
}
while(1)
{
int find=0;
number=rand()%45+1;
for(i=0;i<count;i++)//查找是否已抽出过这个数
{
if(number==s[i])
{
find=1;
break;
}
}
if(find==0)//如果没抽出过该数则可打印输出
{
break;
}
}
printf("幸运同学的号码为: %d \n",number);
s[count++]=number;//抽出的数保存在数组中
}
return 0;
}
我写成了5个一行,从左到右,如果想要1个1行可以把代码第14行改为
printf("%d\n",prize);
#include <stdioh>
#include <stdlibh>
#include <timeh>
int main(void) {
int prize, a[51] = {0};
srand(time(NULL));
//j为当前生成成功的个数
for (int i = 0,j=0; i < 50000&&j<51; i++) {
//prize为随机生成的1到50中的某个数
prize = rand() % 50 + 1;
//如果a[prize]!=0,说明这轮生成prize之前已经生成过了
//那么就继续循环,生成下一个数
if (a[prize])
continue;
//如果这轮生成prize之前没有,那么统计个数j++
//并把a[prize]++,这样a[prize]就不会为0了
j++;
a[prize]++;
printf("%3d%c", prize,j%5==0'\n':' ');
}
return 0;
}
#include<stdioh>
#include<stdlibh>
#include<timeh>
#include<stringh>
typedef struct
{
char name[16],address[64];
}owner;
char company[8]={'\0'};
owner t;
int isexist(FILE f,owner ow)
{
fseek(f,0,SEEK_SET);
while(!feof(f))
{
if(2==fscanf(f,"%s %s",tname,taddress))
{
//下面的两个if可根据实际需要任选一个
//业主姓名、房产地址都相同,才认为业主信息已存在
if(!strcmp(tname,owname) && !strcmp(taddress,owaddress))
return 1;
//只要业主的房产地址相同,即认为业主信息已存在
/if(!strcmp(taddress,owaddress))
return 1;/
}
}
fseek(f,0,SEEK_END);
return 0;
}
void schedule(FILE f,owner ow)
{
company[0]='A'+rand()%6;
fprintf(f,"%s %s %s\n",owname,owaddress,company);
fflush(f);
printf("业主:姓名=%s,地址=%s,的房子已指派给%s公司评估。\n",owname,owaddress,company);
}
int main()
{
const char Exit[]="exit";
char fn1[]="file1txt",fn2[]="file2txt";
FILE f1=NULL,f2=NULL;
owner ow;
f1=fopen(fn1,"w+");
f2=fopen(fn2,"w");
srand(time(NULL));
while(1)
{
printf("请输入业主姓名、房产地址,输入%s退出:",Exit);
scanf("%s",owname);
if(!strcmp(Exit,owname))
break;
scanf("%s",owaddress);
if(isexist(f1,ow))
{
printf("此业主信息已经存在了,请重新输入。\n");
}
else
{
fprintf(f1,"%s %s\n",owname,owaddress);
fflush(f1);
schedule(f2,ow);
}
printf("\n");
}
fclose(f1);
fclose(f2);
return 0;
}
#include <bits/stdc++h>
using namespace std;
int n,a[233];
int main(){
freopen("ain","r",stdin);
freopen("aout","w",stdout);
scanf("%d",&n);
for (int i=0;i<n;i++) scanf("%d",&a[i]);
printf("%d\n",a[rand()%n]);
}
#include<stdioh>
void main()
{
int a[]={1,2,3,4,5,6,7};
int b[7],i,j,count=0,max=0,maxflag;
for(i=0;i<7;i++)
scanf("%d",&b[i]);
i=0;
while(i<7)
{
j=0;
count=0;
if(b[i]==a[j])
while(i<7 && j<7 && b[i]==a[j]) i++,j++,count++;
else
i++;
if(max<count) {max =count;maxflag=i;}
}
count = max;
if(count==7) printf("特等奖\n");
else if(count==6)
{
if(maxflag==7)
printf("二等奖\n");
else
printf("一等奖\n");
}
else if(count==5)
{
if(maxflag==7)
printf("三等奖\n");
else
printf("二等奖\n");
}
else if(count==4)
{
if(maxflag==7)
printf("四等奖\n");
else
printf("三等奖\n");
}
else if(count==3)
{
if(maxflag==7)
printf("五等奖\n");
else
printf("四等奖\n");
}
else if(count==2 && maxflag!=7)
printf("五等奖\n");
else
printf("没中奖\n");
}
以上就是关于用C语言编写,使用51单片机生成0--9不重复数字。请问用什么做随机种子,如何产生不重复随机数全部的内容,包括:用C语言编写,使用51单片机生成0--9不重复数字。请问用什么做随机种子,如何产生不重复随机数、关于c语言数字抽奖问题。我想按任何键可以重复抽奖,然后被抽中的会删除这个该怎么改急急急!!!、C语言,要求:能够循环的对某一范围(如1--50号)进行抽奖,而且不能重复等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)