分类：电脑/网络-程序设计-C/C++
问题：救命啊!!VC的题目!!(限未来24小时)虽然现在分少,但已经倾 
虽然现在分少,但已经倾我所有了.有好人的话,我会追加的!! 不要用++,就用C. 1.设用二维数组deck[52][2]表示一副扑克牌,数组的一行存储一张牌的花色和面值.另引入以下字符指针数组用于存储牌的花色名称: char*suit[4]={“Spades”,”Hearts”,”Diamonds”,”Clubs”}; 以下字符指针数组用于存储牌的面值:char*face[13]={“Ace”,”Deuce”,”Three”,”Four”,”Five”,”Six”,”Seven”,”Eight”,”Nine”,”Ten”,”Jack”虽然现在分少,但已经倾我所有了.有好人的话,我会追加的!! 不要用++,就用C. 1.设用二维数组deck[52][2]表示一副扑克牌,数组的一行存储一张牌的花色和面值.另引入以下字符指针数组用于存储牌的花色名称: char*suit[4]={“Spades”,”Hearts”,”Diamonds”,”Clubs”}; 以下字符指针数组用于存储牌的面值:char*face[13]={“Ace”,”Deuce”,”Three”,”Four”,”Five”,”Six”,”Seven”,”Eight”,”Nine”,”Ten”,”Jack”,”Queen”,”King”}; 试按以下要求编写洗牌模拟函数.令52张牌按顺序与整数0至51对应.首先顺序地将花色和面值填入数组deck中,然后逐一考察这52张牌,并为每张牌随机产生一个0至51范围内的一个整数,并将当前正在考察的牌与随机产生的整数对应的牌交换.直至每张牌都被考察后,洗牌结束. 2.利用洗牌函数的结果,编写牌的输出函数,依次输出洗牌函数产生的第1张至第52张牌的花色和面值. 3.编写对给定的5张牌,求满足以下要求的函数: (1) 这手牌是否有一个对子 (2) 这手牌是否有两个对子 (3) 这手牌是否有三张面值相同的牌 (4) 这手牌是否是一个顺子,即5张牌的面值连续 (5) 这手牌是否是同一种花色 (6) 这手牌是否有三张面值相同的牌,并且另外两张牌的面值也相同 4.编写函数,对给定两手5张牌确定哪一手的牌更好 5.设用有N个元素的整型数组表示一个[1,N]上的整数集合,试设计一组函数用于模拟以下集合运算: empty(s) 置集合s为空集 isEmpty(s) 测试集合s是否为空集 add(s,i) 将整数i添加到集合s in(s,i) 测试正整数i是否是集合s的元素 unionset(s1, s2, s3) 求集合s1和s2的和集合s3 comp(s1,s2) 求集合s1的补集合s2 sub(s1, s2, s3) 求集合s1和s2的差集合s3 issubset(s1, s2) 测试集合s1是否是集合s2的真子集
回答：大一时曾作过一道类似的题目,好象没有那么多要求,而且做的也比较随意,贴上仅作为参考#include<tream.h>#include<stdlib.h>#include<time.h>#include<iomanip.h>#include<string.h>classcard{ ,num;//ID是给每张牌编号并没有实际作用charsign[10];};classperson{ [15];cardgroup[5]; (){char*p=newchar;cout<<"pleaseinputyourname\n";cin>>p;strcpy(name,p);}voiddisplay(){cout<<name<<'\t';for(inti=0;i<5;i++)cout<<group[i].sign<<group[i].num<<"";cout<<endl;}voidresult();};voidperson::result(){intz=0,t=0,i,j=0,n,sum=0;for(i=0;i<5;i++){n=0;for(j=i+1;j<5;j++){if(group[i].num==z)break;//设定Z是为了防止当有三个或四个相同的时候时,不让它重复显示if(group[j].num==group[i].num)n++;}if(n==1)cout<<name<<"你有一对"<<group[i].num<<endl;if(n==2){z=group[i].num;cout<<name<<"你有三个"<<group[i].num<<endl;}if(n==3){z=group[i].num;cout<<name<<"你有四个"<<group[i].num<<endl;}if(n==0)t++;//如果没有相同项旧转到T==1那里去判断同花和顺,因为只有有相同项时不可能是顺或同花}n=0;//判断是否为同花if(t==1){for(i=1;i<5;i++)if(strcmp(group[i-1].sign,group[i].sign)==0)n++;if(n==4)cout<<name<<"你有同花"<<endl;n=0;//判断是否为顺for(i=1;i<5;i++)if(group[i].num==1){n++;break;}if(n==1)//特殊情况当有1时,只有和为1+13+12+11+10时,才是顺{for(i=1;i<5;i++)sum+=group[i].num;if(sum==47)cout<<name<<"你有顺"<<endl;}else//当没有1时,利用辗转相加再与中间数比较的方法判断是否有顺{for(i=1;i<3;i++)if(2*group[i+1].num==group[i].num+group[i+2].num)j++;if(j==3)cout<<name<<"你有顺"<<endl;}}}voidfun(person&player1,person&player2,person&player3,person&player4)//发牌函数{cardporker[52];//定义一副牌srand(time(0));inti,t,j;for(i=0;i<52;i++){porker[i].id=i+1;porker[i].num=rand()%13+1;t=rand()%4;switch(t){case0:strcpy(porker[i].sign,"HongTao");break;case1:strcpy(porker[i].sign,"HeiTao");break;case2:strcpy(porker[i].sign,"FangPian");break;case3:strcpy(porker[i].sign,"MeiHua");break;}for(j=0;j<i;j++)if((porker[i].num==porker[j].num)&&(strcmp(porker[i].sign,porker[j].sign)==0)){porker[i].sign[0]='\0';i--;break;}}//以上代码作用是用随机函数排序//for(i=0;i<52;i++)//cout<<setw(10)<