我程式如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
unsigned N=0,K=0,W=0,total=0;
while ( scanf("%u %u %u",&N,&K,&W) != EOF ) {
total = N;
while( N >= K ) {
total += (N/K)*W ;
N = N - (N/K)*K + (N/K)*W ;
}
printf("%u\n",total);
}
return 0;
}
在我電腦上執行三個範例,是正確的。
但是在網頁上的測試,結果是:
RE (SIGFPE)
溢位或者除以0的錯誤!!
Floating point exception (core dumped)
實在想不出哪裡會有溢位問題,我就把 scanf 的 while迴圈 內容整個變成:
while ( scanf("%u %u %u",&N,&K,&W) != EOF ) {
total += (N/K)*W ;
printf("%u\n",total);
}
或是
while ( scanf("%u %u %u",&N,&K,&W) != EOF ) {
total = N - K/W ;
printf("%u\n",total);
}
測試結果還是一樣的 RE.
我再改成
while ( scanf("%u %u %u",&N,&K,&W) != EOF ) {
total = N + K - W ;
printf("%u\n",total);
}
測試結果卻變成
TLE (1s)
Killed
請問這到底是發生什麼事?
大致測試了一下,
你最上面的那個程式「送出解答」可以AC的沒問題,
所以我猜你的問題應該在於「測試執行」為什麼會RE/TLE的問題~
首先要知道「測試執行」只會幫你測試題目中的「範例輸入」與「範例輸出」, (當然「測試執行」下面的 輸入/輸出 是可以自己改的, 不過預設是「範例輸入」與「範例輸出」)
由於本題是單筆輸入但出題者可能希望給予答題者多一點的範例測資,
所以其在「範例輸入」與「範例輸出」中的格式並非實際測資的格式, (好比有"// Example 1"的說明文字用來告訴答題者這是第一個範例測資)
如果沒有將這些說明文字去除就直接測試會導致scanf()輸入失敗,
又剛好你一開始將變數皆設為0所以就導致了除以0的RE,
而最後一個會TLE的原因是因為沒進行除法(所以不會RE),
但scanf()一直輸入失敗導致不會往後讀到檔尾(EOF)而TLE的~
以上是本人的猜測希望有幫助到你~ OwO
大致測試了一下,
你最上面的那個程式「送出解答」可以AC的沒問題,
所以我猜你的問題應該在於「測試執行」為什麼會RE/TLE的問題~
首先要知道「測試執行」只會幫你測試題目中的「範例輸入」與「範例輸出」, (當然「測試執行」下面的 輸入/輸出 是可以自己改的, 不過預設是「範例輸入」與「範例輸出」)
由於本題是單筆輸入但出題者可能希望給予答題者多一點的範例測資,
所以其在「範例輸入」與「範例輸出」中的格式並非實際測資的格式, (好比有"// Example 1"的說明文字用來告訴答題者這是第一個範例測資)
如果沒有將這些說明文字去除就直接測試會導致scanf()輸入失敗,
又剛好你一開始將變數皆設為0所以就導致了除以0的RE,
而最後一個會TLE的原因是因為沒進行除法(所以不會RE),
但scanf()一直輸入失敗導致不會往後讀到檔尾(EOF)而TLE的~
以上是本人的猜測希望有幫助到你~ OwO
果然 AC.
沒想到居然會是這樣的狀況!感謝!