私は 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