......原本一直調整測試過不了快把求救文打完,結果把備註打完順便再調整拿去測試就過了。
解法邏輯如下
另外,如果把else if(d/c==c/b) 改成 if(d/c==c/b)會得到↓
WA (line:2)
您的答案為: 1 2 3 4 4
正確答案為: 1 2 4 8 16
改成while迴圈內用兩個if判斷,感覺這樣改沒問題,不太明白失敗原因。
------------------------------------------------
#include <iostream>
using namespace std;
int main(){
int a,b,c,d,e,t; //宣告變數
cin>>t; //輸入數列的數目
if(0 < t && t <= 20){ //依題目說明列條件,數列的數目在1~20內
while(t > 0){ //當t>0,迴圈開始
cin>>a>>b>>c>>d; //輸入ABCD的數字
if(d-c==c-b){ //假設公差相同
e=d+(d-c); //算出e
cout<<a<<" "<<b<<" "<<c<<" "<<d<<" "<<e<<endl; //輸出
}
else if(d/c==c/b){ //假設公比相同
e=d*(d/c); //算出e
cout<<a<<" "<<b<<" "<<c<<" "<<d<<" "<<e<<endl; //輸出
}
t=t-1; //t-1,直到t=0迴圈結束
} //結束迴圈
} //結束第一個if
return 0;
}
請注意:if ... if
和 if ... else if
是不同的流程,if ... if
無論第一個 if 是 T 或 F,第二個 if 都會作判斷;if ... else if
則是當第一個 if 為 F 時,else if 才會作判斷,以這題來說,if ... if
有可能造成一筆測資輸出兩次的錯誤
另外,如果把else if(d/c==c/b) 改成 if(d/c==c/b)會得到↓
WA (line:2)
您的答案為: 1 2 3 4 4
正確答案為: 1 2 4 8 16
改成while迴圈內用兩個if判斷,感覺這樣改沒問題,不太明白失敗原因。
這邊有兩個問題,一是我上述提到的 if 流程,二是整數的除法,3 / 2
會得到 1
而不是 1.5
,4 / 3
也不是 1.333..
,會讓你的等比判斷不如預期
只能說還好是先判斷等差,不然改成 if ... else if
還是會拿 WA
請注意:
if ... if
和if ... else if
是不同的流程,if ... if
無論第一個 if 是 T 或 F,第二個 if 都會作判斷;if ... else if
則是當第一個 if 為 F 時,else if 才會作判斷,以這題來說,if ... if
有可能造成一筆測資輸出兩次的錯誤另外,如果把else if(d/c==c/b) 改成 if(d/c==c/b)會得到↓
WA (line:2)
您的答案為: 1 2 3 4 4
正確答案為: 1 2 4 8 16
改成while迴圈內用兩個if判斷,感覺這樣改沒問題,不太明白失敗原因。這邊有兩個問題,一是我上述提到的 if 流程,二是整數的除法,
3 / 2
會得到1
而不是1.5
,4 / 3
也不是1.333..
,會讓你的等比判斷不如預期只能說還好是先判斷等差,不然改成
if ... else if
還是會拿 WA
第一個問題懂了,如果數列是11111之類的數列會同時滿足等差(0)與等比(1)輸出兩次,如果題目中再加入等差也是自然數就可以這樣寫。
第二個問題沒關係,題目中已經有說明「約定數列的前五項均為不大於105的自然數,等比數列的比值也是自然數。」,不會有餘數所以這樣寫沒問題。
感謝說明。
只能說還好是先判斷等差,不然改成
if ... else if
還是會拿 WA
以數列 1 2 3 4
來說,a=1 b=2 c=3 d=4
,若是先判斷等比,寫成
if (d/c == c/b) { // 輸出等比數列 } else if (d-c == c-b) { // 輸出等差數列 }
會是等比判斷 d/c == c/b
成立,因為 (4/3 → 1) == (3/2 → 1),會輸出錯誤的 1 2 3 4 4
(4*(4/3) → 4
),但測資符合限制條件,只是需要判斷成等差
請注意:
if ... if
和if ... else if
是不同的流程,if ... if
無論第一個 if 是 T 或 F,第二個 if 都會作判斷;if ... else if
則是當第一個 if 為 F 時,else if 才會作判斷,以這題來說,if ... if
有可能造成一筆測資輸出兩次的錯誤另外,如果把else if(d/c==c/b) 改成 if(d/c==c/b)會得到↓
WA (line:2)
您的答案為: 1 2 3 4 4
正確答案為: 1 2 4 8 16
改成while迴圈內用兩個if判斷,感覺這樣改沒問題,不太明白失敗原因。這邊有兩個問題,一是我上述提到的 if 流程,二是整數的除法,
3 / 2
會得到1
而不是1.5
,4 / 3
也不是1.333..
,會讓你的等比判斷不如預期只能說還好是先判斷等差,不然改成
if ... else if
還是會拿 WA
第一個問題懂了,如果數列是11111之類的數列會同時滿足等差(0)與等比(1)輸出兩次,如果題目中再加入等差也是自然數就可以這樣寫。
第二個問題沒關係,題目中已經有說明「約定數列的前五項均為不大於105的自然數,等比數列的比值也是自然數。」,不會有餘數所以這樣寫沒問題。
感謝說明。