问题描述
问题是:四个人52张牌【没有大小王】,随机发牌,最后输出显示每个人各发到什么牌【提示:可使用数组存放玩家和扑克牌,可使用随机数达到洗牌发牌的随机效果】整体参考思路:程序过程为:初始化所有牌---洗牌-----发牌-----展示每人的牌一维数组Card存放52张牌【不考虑大小王】,二维数组Player存放发牌后四个玩家的牌【如A的牌为Player0---Player0,A的牌为Player1---Player1】可用三位整数表示一张扑克牌,最高位表示牌的花色,后两位表示点数。例如:101,102,...... ,113分别表示红桃A,红桃2......红桃K;201,202,...... ,213分别表示方块A,方块2......方块K;301,302,...... ,313分别表示梅花A,梅花2......梅花K;401,402,...... ,413分别表示黑桃A,黑桃2......黑桃K;
@@@@@@@@@@@@@分割线@@@@@@@@@@@@@
我的代码是: (已修改)
#include<iostream>#include<string>#include<cstdlib>using namespace std;int main(){ int iacnt[4][13]; for (int h = 0;h < 4;++h) {for (int f = 0;f < 13;++f) iacnt[h][f] = 0; } int a = 0; int j = 0, k = 0; int ia[4][13] = {{ 101,102,103,104,105,106,107,108,109,110,111,112,113 },{ 201,202,203,204,205,206,207,208,209,210,211,212,213 },{ 301,302,303,304,305,306,307,308,309,310,311,312,313 },{ 401,402,403,404,405,406,407,408,409,410,411,412,413 } }; int player[4][13];//利用两个for循环达到顺序给玩家发牌的目的; for (int jcnt = 0;jcnt < 4;++jcnt) {for (int kcnt = 0;kcnt < 13;++kcnt){ soso: a = rand(); j = a % 4, k = a % 13; if (iacnt[j][k] = 1)goto soso; //利用goto语句,使同一张牌发给第二个人的时候重新进行此次for循环 player[jcnt][kcnt] = ia[j][k]; iacnt[j][k] = 1;} } for (int m = 0;m < 4;++m) {for (int n = 0;n < 13;++n) cout << player[m][n] << ’ ’; } system('pause'); return 0;}
问题解答
回答1:一眼能看出的错误当发牌完成后 n没有加一,n++位置有问题其他错误得再细看if (iacnt [j] [k] == 1)双等于
回答2:初略看了一眼,你这里的n从0开始,然后while的判断条件又是n<53,所以你总共发了53张牌。还有,中间那两个for循环里面的jcnt和kcnt没有改变过,你修改的是j和k,所以会一直在循环里面执行,这就是你一直没有输出的原因了。还有,你的icnt二维数组从来没有初始化过,你把他赋给Player有什么用,没看懂?最好给你的代码添加几句注释
回答3:都c++了,数组能用array么?