wei___123 2017-06-09 08:40 采纳率: 75%
浏览 2532
已采纳

C语言分奖励等级,抽奖代码

本问题我已经自我解决,代码如下我已改,求推荐好代码,关于九格抽奖的,像老虎机那样,还有转盘抽奖,求网址看,看大神的代码,越标准,越正式越好

题目是我自己想的:今有抽奖活动,一共有N张抽奖券,一等奖1名奖金一个亿,二等奖2名奖励宝马一辆,三等奖3名一百万,勉励奖10名***酒店1000元优惠券,特等奖N/100名一个屁

我的思路
1,先给两个总量N的数组,赋值1到N;两个数组内容一样,
2设置好变量或数组,用以储存从数组一中随机选取出的数;
3,在数组一中随机选取一个数,把值传递给先前2中设置好的储存位置,分别进行好一等奖二等奖等等的号码选取,选取一个 后再将数组一中已选取的数组删去,方便下次随机不会随机到一样的数字;
4,在数组二中随机选取一个数,分别与步骤二中各个变量和数组的值比较是否相同,若与一等奖值相同则输出恭喜获得一等奖,以此类推,选取一个删除一个,防止重复

#include
#include
#include

#define N 10000 //定义抽奖总量
#define ONE 1 //一等奖数
#define TWO 2 //二等奖数
#define THREE 3 //三等奖数
#define TEN 10 //勉励奖数

static int count=0; //每次循环选出后取余减少
static int count1=0; //每次循环后减去a数组的已选出的

void input(int *p,int *q,int index); //声明输入函数
void choice(int n,int *p,int *q); //声明选出中奖号码
int select (int n,int *p,int number); //声明抽奖

main()
{
int a[N],b[N],first,second[2],third[3],encourage[10],special[N/100]; //储存所有抽奖券,一等奖,二等奖,三等奖,
int i;
int p,*q,*one,*two,*three,*encourage_,*special_; //指针
int number; //抽奖抽得号码
p=a,q=b;

input(p,q,1); //输入
// for(i=0;i<N;i++) printf("%6d",p[i]); //检验输入
srand(time(NULL));
one=&first;
two=second;
three=third;
encourage_=encourage;
special_=special;
choice(ONE,p,one); //选取一等奖
choice(TWO,p,two); //选取二等奖
choice(THREE,p,three); //选取三等奖
choice(TEN,p,encourage_); //选取勉励奖
choice(N/100,p,special_);
// printf("%d\n",first);
// for(i=0;i<2;i++) printf("two:%d",
(two+i));
// for(i=0;i<3;i++) printf("three:%d",*(three+i));
// for(i=0;i<10;i++) printf("encourage_:%d",*(encourage_+i));
// for(i=0;i<(N/100);i++) printf("special_:%d",*(special_+i));
for(i=0;i<3;i++)
{

printf("请输入你想抽取的号码(1~10000)\n"); //选取特等奖
printf("你还有%d次机会\n",3-i);
scanf("%d",&number);
if(number==0) break;
if(select(ONE,one,number)==1) printf("恭喜你得了一等奖\n");
else if(select(TWO,two,number)==1) printf("恭喜你得二等奖\n");
else if(select(THREE,three,number)==1) printf("恭喜你得了三等奖\n");
else if(select(TEN,encourage_,number)==1) printf("恭喜你得了勉励奖\n");
else if(select(N/100,special_,number)==1) printf("恭喜你得了特等奖\n");
else printf("很遗憾,您与奖励插肩而过\n");
}
if(i==3) printf("很抱歉,您的机会已用完,请重新打开程序");
}

void input(int p,int *q,int index)
{
for(;index<=N;index++)
{
*(p+index-1)=index;
*(q+index-1)=index;
}
/
(p+index-1)=index;
*(q+index-1)=index;
if(index<N)
{
input(p,q,index+1);
}
/
}

void choice(int n,int p,int *w)
{

int l; //储蓄下标
while(n)
{
int m=N-count;
l=rand()%m;
/*printf("p%d:%d\n",n,
(p+l));*/
w[n-1]=*(p+l);
/* printf("w:%d\n",w[n-1]);*/
count1++;
if(l==N-1) *(p+N)='\0';
else
{
for(;l<N;l++) //循环删去已用的
{

p[l]=p[l+1];

}
p[n-count1]='\0';
}
n--;
count++;
}
}

int select (int n,int p,int number)
{

int count2=0; //判断是否和中奖数列某数相同
while(n)
{

if(
(p+n-1)==number) count2++;
n--;
}
// printf("count2=%d\n",count2);
if(count2==1) return 1;
else return 0;
}

  • 写回答

1条回答 默认 最新

  • threenewbee 2017-06-09 17:22
    关注

    代码问题就你自己去思考了。

    一般商业上搞抽奖都是为了欺骗消费者,主要的设计有两个,一个是转盘抽奖的每个奖区扇形面积相同,让人产生高奖值概率很大的错觉。实际上,先按照概率随机生成获奖结果,然后再显示。
    另一个更缺德,实际上根本没有随机抽奖的逻辑,直接导向设计者期待的结果。
    还有,用于产品促销性质的抽奖,根据有关法规,最高奖励不能超过5000。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!