#include<iostream>
using namespace std;
int main(){
double t,a,b,c,d,e;
double f[20][4]{0};
while(cin>>t){
for(short i=0;i<t;i++){
cin>>a>>b>>c>>d;
if(b-a==c-b){
e+=(b-a);
}else{
e*=(b-a);
}
for(short j=0;j<5;j++){
f[i][j]=a;
f[i][j+1]=b;
f[i][j+2]=c;
f[i][j+3]=d;
f[i][j+4]=e;
}
}
}
for(short i=0;i<t;i++){
for(short j=0;j<5;j++){
cout<<f[i][j]<<f[i][j+1]<<f[i][j+2]<<f[i][j+3]<<f[i][j+4]<<endl;
}
}
return 0;
}
你的程式有著許多問題以下列舉一些:
1. 首先關於你所謂程式死掉(RE)的問題,
在 line15 和 line17 的 for 迴圈內你已經直接 修改/輸出 f[i][j]~f[i][j+4] 了,
再跑一個 for 迴圈除了重複 修改/輸出 之外還會超出矩陣存取範圍~
(EX: 當 j=4 時 f[i][j+4] 會超出範圍)
2. 計算上的錯誤,
當數列成等比數列時其公比應為 b/a 而非 b-a ~
3. 重複輸入 t ,
本題的 t 是告訴你本題有幾筆測資,
所以只要對於 t 輸入一次就好不需要放在 while() 之中,
這樣子寫會導致重複輸入(後面就會讀取錯誤的數值)且當讀到 EOF(檔案結尾) 時才會跳出迴圈~
4. 輸出的格式與型態,
輸出的數列每個數字之間要有空格' '隔開,
且由於你的 f[i][j] 型態是 double ,
直接使用 cout 做輸出的話會輸出小數的形式(就算計算結果是個整數)而此非題目所要求的~
以下給樓主本題合理的操作順序,
輸入t → [迴圈: 輸入 a b c d → 計算e → 輸出 a b c d e → 重複迴圈 ] → 結束程式
建議在迴圈內操作 輸入、計算、輸出 ,
這樣就不需要將答案給儲存起來了~
以上希望有幫助到你~ OwO