问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

猜扑克牌的C语言程序设计,急急急!!

发布网友 发布时间:2022-11-02 07:16

我来回答

3个回答

热心网友 时间:2023-10-22 21:31

作业要自己做呀~~~呵呵,给你一个吧,学C++的时候自己做的一道课后习题。
代码给你拷上来,一些不必要的部分你自己改一下就可以了。
当时随便做的,还可以再进一步优化的。

另:回楼上的,这题主要是三次排序的问题。第一次选择一个行数,然后把那行的元素分成三份到每一行去,第二次再选一行,那么把那一行的第一次就有的三个元素再分布到每行中去,这样,最后每行只剩下一个两次都选择了的元素。那么最后再选一行答案就是唯一的了。

#include<iostream>
#include<string>
#include<time.h>
using namespace std;
namespace variable
{
int used;
static int i;
}
namespace array
{
int used[27]={0};
}

/*自定义函数部分*/
void drawline(int n)//画线函数
{
if(n==1)
cout<<"----------------------------";
else
cout<<"-------------------------------------------------------------------------------";
}
//打印版权信息~~嘿嘿~~~~~自己写的程序~~~标个版权~~
void printcopy(){
int short_line(1);
drawline(short_line);
cout<<"Copyright(c) SehDan.Lee";
drawline(short_line);
cout<<endl;
}
//函数:为名为poker的string类型数组赋初值,作用:生成一副扑克牌
void push_poker(string *str,int len)
{
string list[15];
for(int i=3;i<18;i++)
switch(i)
{
case 10:list[i-3]="10";break;
case 11:list[i-3]='J';break;
case 12:list[i-3]='Q';break;
case 13:list[i-3]='K';break;
case 14:list[i-3]='A';break;
case 15:list[i-3]='2';break;
case 16:list[i-3]="KING2";break;
case 17:list[i-3]="KING1";break;
default:list[i-3]=i+48;
}
string type[4]={"a","b","c","d"};
i=0;
for(int j=0;j<13;j++)
{
for(int k=0;k<4;k++)
{
*(str+i)=type[k]+"-"+list[j];
i++;
}
}
for(i=0;i<2;i++)
*(str+len+i-2)=list[i+13];
}

//函数:检测生成的扑克牌是否已被使用
int chk_used(int *p,int i)
{
for(int j=0;j<27;j++)
{
if(*(p+j)==i)
{
return 1;
break;
}
}
return 0;
}

//函数:标记已使用的扑克牌
void used(int *p,int i)
{
*(p+variable::i)=i;
variable::i++;
}

//数组置零
void set_int_array(int *p,int len)
{
for(int i=0;i<len;i++)
*(p+i)=0;
}

//抽取扑克
void set_poker(string *str,string *p_poker,int n)
{

for(int i=0;i<n;i++)//随机抽取n张牌
{
srand((unsigned)time(NULL));//以系统时间为种子,产生不同的随机值
variable::used=rand()%54;
while(chk_used(array::used,variable::used)==1){variable::used=rand()%54;}//确保产生不重复的随机值
used(array::used,variable::used);//标记产生的随机值,确保下次不再出现
*(p_poker+i)=*(str+variable::used);
}
variable::i=0;
set_int_array(array::used,27);
}

//出题函数
void print_area(string *str,int times,int row,int row_2,int *r)
{
int p_row,i,n_list[27]={0};
for(i=0;i<27;i++)
n_list[i]=i;
if(times!=1)
{
//接下来处理第一次收集的row信息
int t;
for(i=0;i<3;i++)
{
t=n_list[i];
n_list[i]=n_list[(row-1)*9+i];
n_list[(row-1)*9+i]=t;
}
for(i=0;i<3;i++)
{
t=n_list[i+12];
n_list[i+12]=n_list[(row-1)*9+i+3];
n_list[(row-1)*9+i+3]=t;
}
for(i=0;i<3;i++)
{
t=n_list[i+24];
n_list[i+24]=n_list[(row-1)*9+i+6];
n_list[(row-1)*9+i+6]=t;
}
//第二次收集到的row信息(row_2)
if(times==3)
{
for(i=0;i<3;i++)
{
t=n_list[(row_2-1)*12+i];
n_list[(row_2-1)*12+i]=n_list[i*9];
n_list[i*9]=t;
}
for(i=0;i<27;i++)
*(r+i)=n_list[i];
}
}
for(i=0;i<27;i++)
{
if(i%9==0)
cout<<endl<<"Line "<<i/9+1<<":";
cout.width(8);
cout<<*(str+n_list[i]);
}
cout<<endl;
}
/*主函数*/
void main()
{
int again=1;
int times,row,row_2,row_last,r[27],long_line=0;
string poker[54],p_poker[27];
push_poker(poker,54);
while(again)
{
times=1,row=0,row_2=0,row_last=0;
printcopy();
set_poker(poker,p_poker,27);
while(times!=4)
{
drawline(long_line);
print_area(p_poker,times,row,row_2,r);
drawline(long_line);
cout<<endl;
if(!row)
cout<<"Remember a card,and tell me what line it reside in(1/2/3):";
else
cout<<"What line the card you remembered reside in now(1/2/3):";
if(!row)
cin>>row;
else if(!row_2)
cin>>row_2;
times++;
}
int final;
cin>>final;
drawline(long_line);
cout<<"\nYour remembered card is: "<<p_poker[r[(final-1)*9]]<<endl;
cout<<"Donot believe it? Try again?(1 for yes,0 for no)";
cin>>again;
cout<<"\n\n\n";
if(again!=1&&again!=0)
{
cout<<"error!";
break;
}
}
}

热心网友 时间:2023-10-22 21:32

哦 原来是这样 谢了 楼下
这样找 不一定到到的就是唯一的,有可能有几个数据!
有时间帮你做!

热心网友 时间:2023-10-22 21:32

我有VB写的,要不?
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
沈阳有哪些家居商场 沈阳都有哪些家居城 沈阳市有多少个家具城 沈阳都有什么家具城 沈阳有多少家家俱商城 沈阳家具地方有哪些 沈阳有哪些大型家居 沈阳美凯龙有什么牌子 沈阳家居市场有哪些品牌 消食片饭前还是饭后吃 C语言问题求助,第一次学C语言,作业题目中有一道是判定一个数是不是三角形数(triangular number) C语言老师布置的第一次作业,我连作业是什么意思都看不懂,谁能帮我解释一下吗? 你能发现在会议上有多少人出席?英语怎么说?出席用show up 短语“出席”怎么说? 胶襄咖啡机可否煮开水泡茶吗? 荣耀60有时候没有提示音 格力空调压缩机是什么牌子的? 公司的生育险怎么办理 12306跳转银行app没反应 公司级鞋是什么? 如何设置GUEST账户不能打开管理员的任何OFFICE软件 为什么在来宾账户打不开excel源文件 打开Excel表格,会出现本机限制打开不了是什么原因呢 开启Guest来宾模式进入时,里面的excel文档打不开 小米手机型号修改了 为什么后面的mi3w改不掉 小米手机的MI3W 16G是多少钱? 擦擦擦 MI3W 刷了MIUI6后为什么照相机开不起来? 苗木截杆2.8米左右范围幅度是多少 泓森槐的繁殖方法 杨树苗树杆部分黑死,树叶黑死是什么病? C语言编程:求1+(1+2)+(1+2+3)+…+(1+2+3+…+98+99+100)的值 消防电气布线 如果知道了ARP攻击源的IP和MAC,要怎么反击 深度Ghost xp电脑城克隆版v7.0的系统碟如何装?, 大侠帮帮我 VMware Workstation(虚拟机) V7.0.0如何安装系统统? 青苹果乐园版win7 64位v7.5系统安装步骤 威海市国土资源交易系统的用户名和密码忘记了怎么办?还有CA密码也忘记了 没有ca锁,怎么下载挂牌文件 高一理科没怎么听讲,怎么入手补起来 做为一名中学生最主要的任务是什么?? 昨天晚上和男友在操场接吻,接吻到后来,他拉着我的手放在他的胸口,让我感受他的心跳,然后就松开我的手 为什么每次kiss.男友都会把手放在我胸口? 我吻女友的胸口时,她呼吸有点急促,没什么问题吧? 有人说“丁克=为旁系亲属打工一辈子”你认同这句话吗为什么? 安踏玩家一代发售了多少 花呗收款码几天了怎么还在审核中 (雅虎等...)知名互联网公司哪些工作地点是北京? 北京艾利艾互联网科技股份有限公司怎么样? 开车遇到深水怎么办 青岛和绍兴哪里退休工资高