#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
我覺得你寫得有點化簡了,化簡太過度壞處就是別人不太好讀code
並且int的定義你似乎沒有看完全明白
如果(int)/ (int)沒有整除,答案是會無條件捨去的
雖然d/c*d應該要是4.5,但過程被無條件捨去
變成3/2 = 1,1*3=3
樓上所說的問題其實並不會在本題發生,
因為輸入說明有寫「等比數列的比值也是自然數」,
所以是可以直接進行整數除法沒問題的~
樓主會錯的原因在於,
本題要求的是在一開始輸入一個 t 代表接下來會有 t 筆測資,
但樓主卻是直接使用讀取EOF的方法來讀取測資,
所以會把一開始的 t 誤判成測資的一部份而造成計算的錯誤~
(可以發現 8 1 2 3 不是等比也不是等差數列, 因為第一個 8 其實是 t , 用來代表有 8 筆測資 )
以上希望有幫助到你~ OwO