- ベストアンサー
C++の古い課題の解答例
http://www.ialab.is.tsukuba.ac.jp/~maeda/jks/projo/2001/q8.html このページの最後のほうにある、設問1~3を考えていたのですが、いまいちよくわかりませんでした・・・ で、解答例を見ようと思ったのですが、ページが古いのか、回答例のページが表示されません。 よろしければどなたか分かる方解答例を挙げていただけないでしょうか・・・ よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
一応全部書いてみました。 もっと効率のいい書き方があると思いますが、その辺りは自分で考えてください。 void init_card(struct card deck[52]){ int index = 0; for(int suit = 0; suit < 4; suit++){ for(int num = 1; num < 14; num++){ switch(suit){ case 0: deck[index].suit = clubs; break; case 1: deck[index].suit = diamonds; break; case 2: deck[index].suit = hearts; break; case 3: deck[index].suit = spades; break; } deck[index].pips = num; index++; } } } void shuffle_and_deal(struct card deck[52], struct card hand[NPLAYERS][5]){ for(int index = 0; index < 52; index++){ card swap_card; int swap_index = rand() % 52; swap_card.pips = deck[index].pips; swap_card.suit = deck[index].suit; deck[index].pips = deck[swap_index].pips; deck[index].suit = deck[swap_index].suit; deck[swap_index].pips = swap_card.pips; deck[swap_index].suit = swap_card.suit; } int card_index = 0; for(int hand_cards = 0; hand_cards < 5; hand_cards++){ for(int players = 0; players < NPLAYERS; players++){ hand[players][hand_cards] = deck[card_index]; card_index++; } } } int pipscomp(const void* pips1, const void* pips2){ return *((int *)pips1) - *((int *)pips2); } int is_straight(struct card h[5]){ int pips[5]; for(int index = 0; index < 5; index++){ pips[index] = h[index].pips; } qsort(pips, 5, sizeof(int), pipscomp); if((pips[4] - pips[0]) != 4){ return 0; } for(int index = 0; index < 4; index++){ if((pips[index] + 1) == pips[index + 1]){ return 0; } } return 1; } int is_flush(struct card h[5]){ int result = 1; card_hands suit = h[0].suit; for(int index = 1; index < 5; index++){ if(h[index].suit != suit){ result = 0; break; } } return result; } int count_pips(struct card h[5]){ int count = 0; int pips[14]; for(int index = 1; index < 14; index++){ pips[index] = 0; } for(int index = 0; index < 5; index++){ pips[h[index].pips] = 1; } for(int index = 1; index < 14; index++){ count += pips[index]; } return count; } int is_fullhouse(struct card h[5]){ if(count_pips(h) != 2){ return 0; } int pips[5]; for(int index = 0; index < 5; index++){ pips[index] = h[index].pips; } qsort(pips, 5, sizeof(int), pipscomp); if(pips[0] != pips[1] || pips[3] != pips[4]){ return 0; } return 1; }
その他の回答 (2)
- katouka09
- ベストアンサー率50% (130/256)
これって筑波大学の学生向けのページでしょ。 回答例の部分ってリンク切れになっていて、 おそらく学生の講義の課題として出されているので、 わざと削除しているのでは? どうしても知りたければ、課題を出している筑波大学の 先生に質問するのがいいのでは? 参考URLを参照。 筑波大学の学生以外の人から質問されて答えてくれるかは 不明ですが。
- sha-girl
- ベストアンサー率52% (430/816)
とりあえず1番だけ void init_card(struct card deck[52]) { int i,j; int cnt = 0; for( int i = 1 ; i <= 13 ; i++ ){ for( j = 0 ; j < 4 ; j++ ){ deck[cnt].pips = i; deck[cnt].suit = (card_hands)j; cnt++; } } }
お礼
長々と回答していただきありがとうございました。