這裏的目標是從標準輸入讀取1個數字,然後讀取一組數字,然後檢查兩者是否爲雙射。如果我已經正確理解了這一點,那意味着第一個數字必須在數字集合中,並且集合中不能有任何重複的數字。從標準輸入讀數和比較數字C
採樣輸入
3 1 2 3
樣本輸出
YES
採樣輸入
5 2 3 4 5 2
樣本輸出
NO
我輸入
3
1 2 3
我的輸出
NO
看來,我的錯誤來了FR om我的數組檢查重複項。它總是設置checkDups
1。這一段代碼:
for(x=0; x < 20; x++) {
if(n == numbers[x]) checkNums = 1;
for(y=0; y < 20; y++) {
if(x != y && numbers[x] == numbers[y]) {
checkDups = 1;
}
}
}
全碼
int n;
int numbers[21];
int i = 0;
int x = 0;
int y = 0;
int checkDups = 0;
int checkNums = 0;
scanf("%d", &n);
while(i < 20 && scanf("%d", &numbers[i]) == 1) i++;
for(x=0; x < 20; x++) {
if(n == numbers[x]) checkNums = 1;
for(y=0; y < 20; y++) {
if(x != y && numbers[x] == numbers[y]) {
checkDups = 1;
}
}
}
if(checkNums == 1 && checkDups == 0) printf("YES");
else printf("NO");
不要寫代碼,難以閱讀,'爲(I = 0;((I <20)&&(scanf函數( 「%d」,&numbers [i])); ++ i)'更具可讀性,並且一行if語句不會爲代碼添加任何內容,但是難以讀取它,並且使用一致的空格。 –
@iharob謝謝。將修改。你有沒有發現任何其他錯誤? – Adjit
這些都不是錯誤,但很好的可讀和漂亮的代碼是一個很好的開始找到任何。 –