一道关于乐透奖兑奖算法的C语言编程题

来源:百度知道 编辑:UC知道 时间:2024/07/06 16:38:19
乐透奖采用n选m博彩方式,具体签注方式为从1到42的数字中选出6个不重复的号码a0,a1,…,a5,而主办单位会开出6个中奖号码p0,p1,…p5和一个特别号码p6.得奖规则如下:
a) 头等奖:如果{a0,a1,a2,a3,a4,a5}={p0,p1,p2,p3,p4,p5},即6个号码完全相同;
b) 二等奖:如果{a0,a1,a2,a3,a4,a5}中的5个号码出现在{p0,p1,p2,p3,p4,p5}中,且另外一个号码等于p6.
c) 三等奖:如果{a0,a1,a2,a3,a4,a5}中的5个号码出现在{p0,p1,p2,p3,p4,p5}中,且另外一个号码不等于p6.
d) 四等奖:如果{a0,a1,a2,a3,a4,a5}中有4个号码出现在{p0,p1,p2,p3,p4,p5}中.
e) 五等奖:如果{a0,a1,a2,a3,a4,a5}中的3个号码出现在{p0,p1,p2,p3,p4,p5}中.
乐透奖每期投注量一般都在百万以上,请设计效率高的算法并用C语言实现。
如果回答的好,看情况可追加50-100分,谢谢.1楼为什么你的只有3等奖?3楼的为什么你的有2个错误没定义?4楼&3楼一样再6&45行有错误啊.你们经过上机调试了么?我不是说过我不会么,才说为什么有错误?要不我无聊啊?!6楼不要乱骂人

##include "stdio.h"
#include <iostream.h>
#include <stdlib.h>
#include <time.h>
void main()
{
int awardnum[6],yournum[6],sum=0,special,i,j;
bool mark=false;
srand(time(NULL));
for(i=0;i<6;i++)
{
awardnum[i]=rand()%42;
for(j=0;j<i;j++)
{
while(awardnum[i]==awardnum[j]) awardnum[i]=rand()%42;//这里确保摇出的奖没有重复号
}
cout<<awardnum[i]<<endl;//这句话用作调试
}
special=rand()%42;//特殊号码这里没有确保和前面6个数不一样,这样可能出现没有二等奖的情况
cout<<"特殊号码为"<<special<<endl; //这里也用作调试
cout<<"请输入6个不重复的彩票号码"<<endl;
for(i=0;i<6;i++) cin>>yournum[i];
for (i=0;i<6;i++)
{
int temp=sum;
for (j=0;j<6;j++)
{
if (yournum[i]==awardnum[j]) sum++;
}
if(temp==sum)
{
if(yournum[i]==special) mark=true;
}
}
if(sum==6) {cout<<"恭喜,你