0

私は C プログラミングを学んでいます。演習のために、解決すべきタスクを見つけました。誰かが言葉を選んで、他の人が文字を当てていくぶら下げゲームのようなものです。与えられた単語が、選択した単語に対する正しい答えになる可能性がある単語がいくつあるかを確認する必要があります。

入力:

3 3 // 数字 n と m n-比較する単語数、m-チェックされる文字数

ACD // スペースで区切られた m 文字

--CA // 推測する単語

KUCA // この場合、一致するかどうかをチェックする n 単語 "--CA"

ZGRADA // 単語は enter(\n) で区切られます

MACA // この場合、"MACA" は "--CA" と一致しません。これは、推測された文字に "A" があったが、文字を意味する 2 番目のダッシュにはなかったからです

出力: 1

アイデアは、長さが同じであるかどうかを確認することです。現在の文字が「-」であるかどうかを確認する必要があります-;)(rez=n; と宣言される前)

ここに私のコードがあります:

#include <stdio.h>
#include <stdlib.h>

int main()
{
int n=0,i=0,m=0,j=0,k=0,duzina=0,rez=0,br=0;
char slova[26], rec[30], pot[30],c;

scanf("%d %d\n",&n,&m);

br = 0;
while ( (c = getchar()) != '\n' ){
    if ( c != ' ' ) { slova[br] = c; br++; }
}
slova[br] = '\0';
br = 0;
while ( (c = getchar()) != '\n' ){
  rec[br] = c;
  br++;
}
rec[br] = '\0';
rez=n;
duzina=strlen(rec);
for(i=0;i<n;i++){
    br=0;
    while ( (c = getchar()) != '\n' ){
        pot[br] = c;
        br++;
    }
    pot[br] = '\0';
    if(duzina!=strlen(pot))
        rez--;
    else{
        for(j=0;j<duzina;j++){
            if(rec[j]=='-'){
                for(k=0;k<m;k++){
                    if(pot[j]==slova[k]){
                        rez--;
                        break;
                    }
                }
            }
            else{
                if(rec[j]!=pot[j])
                    rez--;
            }
        }
    }
}
printf("%d",rez);

return 0;
}

だから私の問題は間違った答えにあり、その理由はわかりません。

コードは上記の例で機能しますが、この例では -8 と表示され、3 のはずです:

10 5

AILBX

--A--AB-X

PUAQFABHX

IIAFWABIX

MHAKVABPX

BQAXWABWX

テウアイブ

PCALIABLX

RRAYHAEKJ

NWNKSGBNP

ZOCZKJWZR

ROAJRABZX

4

2 に答える 2

0
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
int n=0,i=0,m=0,j=0,k=0,duzina=0,rez=0,br=0;
char slova[26], rec[30], pot[30],c;
short booli=1;

scanf("%d %d\n",&n,&m);

br = 0;
while ( (c = getchar()) != '\n' ){
    if ( c != ' ' ) { slova[br] = c; br++; }
}
slova[br] = '\0';
br = 0;
while ( (c = getchar()) != '\n' ){
  rec[br] = c;
  br++;
}
rec[br] = '\0';


rez=n;
duzina=strlen(rec);
for(i=0;i<n;i++){
    br=0;
    booli=1;// this is the line that i forgot, that caused all the trouble.
    while ( (c = getchar()) != '\n' ){
        pot[br] = c;
        br++;
    }
    pot[br] = '\0';
    if(duzina!=strlen(pot))
        rez--;
    else{
        for(j=0;j<duzina;j++){
            if(rec[j]=='-'){
                for(k=0;k<m;k++){
                    if(pot[j]==slova[k]){
                        rez--;
                        booli=0;
                        break;
                    }
                }
                if(booli==0) break;/*this is for checking if the for-k loop was ended with break;*/
            }
            else{
                if(rec[j]!=pot[j]){
                    rez--;
                    break;
                }
            }
        }
    }
}
printf("%d",rez);

return 0;
}

2度目の休憩が必要だと言ってくれたagbinfoに感謝します。

于 2013-11-23T11:41:21.743 に答える