首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于c语言制作模拟彩票生成器的有关问题

2012-09-13 
关于c语言制作模拟彩票生成器的问题初学编程不久,想完成书上一道制作制作彩票生成器的小程序。遇到如下问题

关于c语言制作模拟彩票生成器的问题
初学编程不久,想完成书上一道制作制作彩票生成器的小程序。遇到如下问题:
要求生成一组5=6个号码的随机数字,范围1~33。我利用srand函数获取系统时间作为rand函数的种子,生成号码后,检查是否有重复,若有就要求重新生成。可我弄了好久,生成的号码一直还是相同的,问题是否出现在检查那里?
我之前是利用for循环逐个检查,然后里面用if判断
部分代码修改后如下:[code=C/C++][/code]//红 6 1~33 蓝 1 1~16 红色不重复,使用冒泡排序对红色进行排序

//检查完之后,逐个输出,并排序

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

void main(){
//声明红色球数组,及蓝色球变量
int red[33],blue;
//
//生成并检查红色球是否有重复出现
for(int i=0;i<6;i++){
do{
for(int j=0;j<33;j++){
srand(time(NULL));
red[j]=rand()%33+1;
}
//循环遍历检查
//此处为要写检查的代码


}
}while();
printf("%d\t",red[i]);

//生成蓝色球
srand(time(NULL));
blue = rand()%16+1;
 
printf("\n%d\n",blue);
}


[解决办法]

C/C++ code
#include <stdio.h>#include <stdlib.h>#include <time.h>unsigned long ulrand(void) {    return (     (((unsigned long)rand()<<24)&0xFF000000ul)    |(((unsigned long)rand()<<12)&0x00FFF000ul)    |(((unsigned long)rand()    )&0x00000FFFul));}int i;unsigned long ul;void main() {    srand(time(NULL));    for (i=0;i<10;i++) {        ul=ulrand();        printf("%010lu 0x%08x\n",ul,ul);    }}//2337588057 0x8b54c359//1977377429 0x75dc6295//3607316769 0xd7034921//0009828482 0x0095f882//3350859779 0xc7ba1003//0945794621 0x385fae3d//3400869024 0xcab524a0//3097846779 0xb8a563fb//4287421124 0xff8cdac4//3934016258 0xea7c5302
[解决办法]
C/C++ code
#include "stdafx.h"#include <string.h>#include <iostream>#include <stdlib.h>#include <windows.h>#include <time.h>using namespace std;bool func1(int *p){    for(int i = 0;i<=8;i++)        for(int j = i+1;j<=8;j++)        {            if(p[i] == p[j])            return false;            else                 continue;                }    return true;}    int _tmain(int argc, _TCHAR* argv[]){    int ch[9];    while(!func1(ch))    {      for(int i= 0;i<=8;i++)        ch[i] = rand()%10;    }    for(int i= 0;i<=8;i++)    {        cout<<ch[i]<<"  ";    }    cin.get();    return 0;}
[解决办法]
srand,只用一次~进入main函数 用一次就够了,程序不退出就不要用第二次

热点排行