ページ 11

【AOJ】入力されていないトランプのカードを出力

Posted: 2013年2月06日(水) 12:29
by winter_cat
 AOJのここの(http://judge.u-aizu.ac.jp/onlinejudge/d ... p?id=10015)問題について質問です。
 cardという配列を作り全てfalseで初期化します。その後、入力される文字によってS→0、H→1、C→2、D→3というふうにswitch文で場合分けをしてcardの配列に数字と共に格納していきます。最後にfalseのままの配列の時だけ(=入力されていない)出力する、という解放で解いてみたのですがいまいちうまく実行されません。
 おかしいのはswitch文かなーと思ってはいるんですが、コンパイルも通ってしまていてソース見る限り特に間違いがあるように思えなくて困っています。どなたかアドバイスお願いいたします。

コード:

#include <iostream>
using namespace std;
int main(){
    int n=0,num=0;
    char c;
    bool card[4][13];
    cin>>n;  //手元のカードの数

    for(int i=0; i<4; i++){
        for(int j=0; j<13; j++){
            card[i][j]=false;
        }
    }
    
    for(int i=0; i<n; i++){
        cin>>c>>num;
        switch(c){
            case 'S': card[0][num-1]=true;
            case 'H': card[1][num-1]=true;
            case 'C': card[2][num-1]=true;
            case 'D': card[3][num-1]=true;
        }
    }

    for(int i=0; i<4; i++){
        for(int j; j<13; j++){
            if(card[i][j]==false){
                if(i==0) cout<<'S'<<" "<<j+1<<endl;
                if(i==1) cout<<'H'<<" "<<j+1<<endl;
                if(i==2) cout<<'C'<<" "<<j+1<<endl;
                if(i==3) cout<<'D'<<" "<<j+1<<endl;
                //cout<<" "<<j+1<<endl;
            }
        }
    }
    
    return 0;
}


Re: 【AOJ】入力されていないトランプのカードを出力

Posted: 2013年2月06日(水) 12:40
by Ryo
いまいちうまく実行されません。
とは、具体的にどういうこと?

Re: 【AOJ】入力されていないトランプのカードを出力

Posted: 2013年2月06日(水) 12:50
by へろりくしょん
こういうのは1行1行丹念に処理を追っていくとすぐに分かります。

17行目からの switch() 文に break 文がありませんね。
ついでに26行目の for() ループの j が初期化されていません。

デバッガを使ってください。

Re: 【AOJ】入力されていないトランプのカードを出力

Posted: 2013年2月09日(土) 17:05
by winter_cat
すみません!完全に見過ごしていました(汗)
ありがとうございますm(__)m