永发信息网

经典C语言扑克牌问题

答案:2  悬赏:20  手机版
解决时间 2021-04-14 21:07
有13张扑克牌,A,2,3,4,5,6,7,8,9,10,J,Q,K
扑克牌先按他预先设计的方法排序,只见他从上边拿出一张放到最下面,又从最上边拿出一张放到桌上是A,然后又从上边拿出一张放到最下面,又从最上边拿出一张放到桌上是2 ……依此类推,直到手里只有一张牌,翻开放到桌上正好为K。
以下是我写的程序:

#include
typedef struct node
{
int value;
struct node* next;
}node;
node *front, *rear;
void insert(node* temp, int value)
{
temp = rear->next;
temp->value = value;
temp->next = front;
}
void move()
{
rear = front;
front = front->next;
}
int main()
{
int b[13] = {13,12,11,10,9,8,7,6,5,4,3,2,1};
node* a[13];
int i;
for(i = 0; i < 13; i++)
{
a[i] = malloc(sizeof(node));
}
front = a[0], rear = a[0];
a[0]->value = b[0];
for(i = 1; i < 13; i++)
{
insert(a[i],b[i]);
move();
}
for(i = 0; i < 13; i++)
{
printf("%d ",front->value);
front = front->next;
}
printf("\n");
free(a[0]);
return 0;
}
编译通过,运行,段错误!
请问,到底哪里出了问题?
最佳答案
数组加循环DEBUG最烦了,建议你先单步调试试试,观察到底是哪一步导致错误的
全部回答
其实这是典型的利用链表求解的问题,但是此题用链表的话还需要应用一个长度为13的数组做辅助,所以我直接用数组来进行演示,将在手中的牌进行标记,将放到桌子上的牌进行赋值。 我在很小的时候我的姥爷就曾给我表演过这个魔术,当时我自己用扑克牌弄了将近两个小时才终于知道了这13张牌的顺序是什么,有兴趣的话你可以自己试一试,很有意思。 下面的代码你可以进行调试来帮助理解整个过程 #include void main() { int poker[13];//十三张扑克牌 for(int i = 0;i<13;i++)//初始化 poker[i] = 0;//0代表牌还在手中,不为0代表放到了桌子上 int remain = 13;//手中剩余的扑克数 int j = 12;//从最下边开始抽牌 int order = 1;//当order为2时,将此时的牌放到桌子上 int number = 1;//从a开始 while(remain != 0) { if(j == -1) { j = 12;//返回最后一张牌 continue; } if(poker[j] != 0)//如果牌已不在手中,则到下一张牌 { j--; continue; } if(order == 2) { poker[j]= number++;//将扑克赋值 remain--;//手中剩余的牌数减1 order = 1; continue; } order++; j--; } //输出一开始小明手中扑克牌的顺序 for(i = 0; i < 13;i++) printf("%d ",poker[i]); } 想要写出一个程序重点在于理解这个过程,只有对这个过程熟悉了才有可能把它用代码来演示出来。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
男人最适合结婚的年龄是.几岁,他的女伴的年龄
真的好想念他,怎么办?
富利大厦在哪里啊,我有事要去这个地方
多肉闷养应该注意什么
诺基亚5300是不是五百块???
谁能帮我取个QQ名字啊
NIKE SB鞋舌是那种非常厚的鞋款具体叫什么呀
电信话费余额怎么查询,中国电信拨打什么号码
单选题我国农历采用“干支”纪年,2010年是农
关于康熙和孝懿仁皇后的小说
谁能给我一张赛尔号米米卡
营养快线可以当酸奶没?
求Photoshop的授权码
合肥春节哪里好玩?多提供几个,谢谢
万福楼大饭店怎么去啊,有知道地址的么
推荐资讯
茅连冲这个地址在什么地方,我要处理点事
请问中核深圳凯利集团公司核电劳务协作分公司
《萌犬虎崽》一书中虎妈妈的疑问是什么
小米2a的图库私密照片密码怎么重设置
我的欢乐豆被锁定了,进不了房间,咋个办哦?
餐具消毒用什么消毒液,谁能告诉我,饭店餐具
Whenthefestivaltheyhavebeenlookingforwardt
Brother美式热狗和平店地址在哪,我要去那里
Henry Ford was the first person to build c
你好,我就是这里有一个汉朝西京信平候虎钮金
为什么游戏总是有人要去骗别人?只是游戏而已.
人生该怎么走下去?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?