#15880: 請問錯在哪裡


a9409394093@gmail.com (賴志宏)

學校 : 不指定學校
編號 : 84809
來源 : []
最後登入時間 :
2018-09-20 18:45:18
a005. Eva 的回家作業 -- POJ | From: [101.15.137.177] | 發表日期 : 2018-11-05 00:02

#include<stdio.h>
#include<stdlib.h>

int main()
{
int a,b,c,d;
while(scanf("%d %d %d %d",&a,&b,&c,&d)!= EOF){
if(d - c == b - a){
printf("%d %d %d %d %d\n",a,b,c,d,d - c + d);
}
else{
printf("%d %d %d %d %d\n",a,b,c,d,d/c*d);
}
}
return 0;
}

請問我的程式 錯在哪

送出解答測資是 8 1 2 3 3

題目測資是 1 2 3 4 5

 
#15881: Re:請問錯在哪裡


zopq4565 (heroming)

學校 : 臺北市立大安高級工業職業學校
編號 : 57261
來源 : [123.194.65.95]
最後登入時間 :
2018-11-05 00:21:42
a005. Eva 的回家作業 -- POJ | From: [123.194.65.95] | 發表日期 : 2018-11-05 00:28

 

我覺得你寫得有點化簡了,化簡太過度壞處就是別人不太好讀code

並且int的定義你似乎沒有看完全明白

如果(int)/ (int)沒有整除,答案是會無條件捨去的

 

雖然d/c*d應該要是4.5,但過程被無條件捨去

變成3/2 = 1,1*3=3




 
#15883: Re:請問錯在哪裡


OwO310659 (OwO)

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

樓上所說的問題其實並不會在本題發生,
因為輸入說明有寫「等比數列的比值也是自然數」,
所以是可以直接進行整數除法沒問題的~

樓主會錯的原因在於,
本題要求的是在一開始輸入一個 t 代表接下來會有 t 筆測資,
但樓主卻是直接使用讀取EOF的方法來讀取測資,
所以會把一開始的 t 誤判成測資的一部份而造成計算的錯誤~
(可以發現 8 1 2 3 不是等比也不是等差數列, 因為第一個 8 其實是 t , 用來代表有 8 筆測資 )

以上希望有幫助到你~ OwO

 
ZeroJudge Forum