#16004: 為何程式死掉? 怎麼改


wuling213_21 (量)

學校 : 國立武陵高級中學
編號 : 81917
來源 : [220.129.121.18]
最後登入時間 :
2018-12-16 17:57:00
a005. Eva 的回家作業 -- POJ | From: [220.129.243.77] | 發表日期 : 2018-11-10 22:31

#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;
}

 
#16005: Re:為何程式死掉? 怎麼改


OwO310659 (OwO)

學校 : 新北市立板橋高級中學
編號 : 58647
來源 : [118.150.111.60]
最後登入時間 :
2024-04-25 01:16:40
a005. Eva 的回家作業 -- POJ | From: [106.105.27.148] | 發表日期 : 2018-11-10 23:28

你的程式有著許多問題以下列舉一些:

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

 
#16006: Re:為何程式死掉? 怎麼改 - Re: 更正說明


OwO310659 (OwO)

學校 : 新北市立板橋高級中學
編號 : 58647
來源 : [118.150.111.60]
最後登入時間 :
2024-04-25 01:16:40
a005. Eva 的回家作業 -- POJ | From: [106.105.27.148] | 發表日期 : 2018-11-10 23:31

關於 1. 所指的是 line15 和 line27 的 for 迴圈,
在此更正~ OwO

 
#16008: Re:為何程式死掉? 怎麼改


tang891228 (tang891228)

學校 : 國立成功大學
編號 : 61119
來源 : [140.116.1.138]
最後登入時間 :
2018-09-24 00:20:31
a005. Eva 的回家作業 -- POJ | From: [61.227.224.161] | 發表日期 : 2018-11-11 01:27

直接使用 cout 做輸出的話會輸出小數的形式(就算計算結果是個整數)而此非題目所要求的~

cout 不會輸出小數後多餘的 0

 
#16010: Re:為何程式死掉? 怎麼改 - Re:感謝糾正


OwO310659 (OwO)

學校 : 新北市立板橋高級中學
編號 : 58647
來源 : [118.150.111.60]
最後登入時間 :
2024-04-25 01:16:40
a005. Eva 的回家作業 -- POJ | From: [106.105.27.148] | 發表日期 : 2018-11-11 02:54

感謝樓上的糾正,
若浮點數剛好為整數並使用 cout 作為輸出的確不會顯示小數的部分~
直接使用 cout 輸出浮點數的效果有點類似 printf() 的 "%g" 

 
ZeroJudge Forum