C言語による不足したカードの発見です。
n 枚のトランプのカードから、足りないカードを出力するプログラムです。
・問題
太郎が花子と一緒にトランプ遊びをしようとしたところ、52枚あるはずのカードが n 枚のカードしか手元にありません。
これらの n 枚のカードを入力として、足りないカードを出力するプログラムを作成して下さい。
太郎が最初に持っていたトランプはジョーカーを除く52枚のカードです。
52枚のカードは、スペード、ハート、クラブ、ダイヤの4つの絵柄に分かれており、各絵柄には13のランクがあります。
・入力される値
最初の行に太郎が持っているカードの枚数 n (n ≤ 52)が与えられます。
続いて n 組のカードがそれぞれ1行に与えられます。
各組は1つの空白で区切られた文字と整数です。
文字はカードの絵柄を表し、スペードが'S'、ハートが'H'、クラブが'C'、ダイヤが'D'で表されています。
整数はそのカードのランク(1 〜 13)を表しています。
・期待する出力
足りないカードをそれぞれ1行に出力して下さい。
各カードは入力と同様に1つの空白で区切られた文字と整数です。
出力するカードの順番は以下のとおりとします:
絵柄がスペード、ハート、クラブ、ダイヤの順番で優先的に出力する。
絵柄が同じ場合は、ランクが小さい順に出力する。
僕が作成、提出したコードは、以下のとおりです。
/* ITP1_6_B : Finding Missing Cards http://judge.u-aizu.ac.jp/ C言語による不足したカードの発見 https://neguse-atama.hatenablog.com */ #include<stdio.h> int main(void){ static int cards[4][13]; int i,j,n,m; char c; char s[5]={'S','H','C','D','\0'}; scanf("%d\n",&n); for(i=0;i<n;i++){ scanf("%c %d\n",&c,&m); for(j=0;j<4;j++) if(s[j]==c){ cards[j][m-1]=1; } } for(i=0;i<4;i++){ for(j=0;j<13;j++){ if(cards[i][j]==0) printf("%c %d\n",s[i],j+1); } } return 0; }
設問の出典は、プログラミング問題のオンライン採点システム「Aizu Online Judge(AOJ)」です。
http://judge.u-aizu.ac.jp/onlinejudge/
ITP1_6_B : Finding Missing Cards