我對 C/C 比較陌生,我正在學習嵌套 for 回圈和陣列。我要問的問題是指下面的代碼
int main(){
int N, M;
bool secret = false;
scanf("%d %d", &N, &M); //N is the amount of weapon "The Hero" has, while M is the amount for "The Villain"
int X[N]; // To store the value of "Damage" each weapon has
int Y[M];
for(int i = 0; i < N; i ){
scanf("%d", &X[i]); // Inputting the value to each weapon
}
for(int i = 0; i < M; i ){
scanf("%d", &Y[i]);
}
for(int i = 0; i < N; i ){
for(int j = 0; j < M; j ){
if(X[i] > Y[j]){ //To check if atleast one weapon of "The Hero" can beat all the weapon of "The Villain" (What i was trying to do anyways)
secret = true;
} else{
secret = false;
}
}
}
if(secret == true){
printf("The dark secret was true\n");
} else{
printf("Secret debunked\n");
}
return 0;
}
我正在嘗試檢查 X 陣列中的至少一種武器是否具有比所有武器更大的值是 Y 陣列(而不是 Y 陣列的總和)。我遇到的問題是,如果我將 X 陣列中的最后一個值設定為低于 Y 陣列中的任何值,它將始終回傳 false,并列印出 else 陳述句,因為回圈將總是到達最后一次迭代并將其用作條件的陳述句。
我期待的結果是
3 5 // The amount of weapons the Hero and Villain has
4 9 2 // The value of each weapon for the Hero
8 4 6 8 3 // The value of each weapon for the Villain
The dark secret was true // The expected output
相反,我得到了
Secret Debunked
因為回圈到 X 陣列中的最后一個值。我嘗試使用 break; 來停止 if 陳述句,在它自己的回圈中使用它,兩者都沒有按預期作業。我正在考慮先安排它,然后使用特定的索引來比較它。但在嘗試之前,我想先在這里問。
uj5u.com熱心網友回復:
問題是您總是secret在內部 for 回圈的每次迭代中設定變數。所以變數存盤了它最后分配的值。
例如用以下方式重寫回圈
for ( int i = 0; !secret && i < N; i ){
int j = 0;
while ( j < M && X[i] > Y[j] ) j ;
secret = j == M;
}
uj5u.com熱心網友回復:
一旦你發現(英雄的)價值大于惡棍的價值,就打破回圈會有所幫助
for (int i = 0; !secret && i < N; i ) { // <= secret == true then exit
for (int j = 0; j < M; j ) {
if (X[i] > Y[j]) {
secret = true;
break; // <= found value, no need to check anymore
} else{
secret = false;
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/529026.html
標籤:数组Cfor循环if 语句嵌套循环
上一篇:如何洗掉csv檔案中已經迭代的行
