#31275: 【C】一直出現TLE,求好心人解答QQ


shimotsukimineko (霜月みねこ)

學校 : 不指定學校
編號 : 196346
來源 : [114.24.36.68]
最後登入時間 :
2023-12-05 17:48:25

為什麼分隔線上面的會TLE,下面的不會? 而且時間好像差了1000倍诶...? scanf直接放while()的判斷裡面怎麼差這麼多? 

#include<stdio.h>

int main(){

    int num = 0;

    while(num != EOF){

    scanf("%d", &num);

        if((num % 4 == 0 && num % 100 != 0) || num % 400 == 0)

            printf("閏年\n");

        else 

            printf("平年");

     } return 0;

}

-----------------------------------------------------------------------

#include<stdio.h>

int main(){

    int num;

    while(scanf("%d", &num) != EOF){

        if((num % 4 == 0 && num % 100 != 0) || num % 400 == 0)

            printf("閏年\n");

        else 

            printf("平年");

     } return 0;

}

#31279: Re: 【C】一直出現TLE,求好心人解答QQ


krameri120 (科科)

學校 : 國立臺南高級工業職業學校
編號 : 102318
來源 : [36.237.203.195]
最後登入時間 :
2025-03-24 14:35:26

為什麼分隔線上面的會TLE,下面的不會? 而且時間好像差了1000倍诶...? scanf直接放while()的判斷裡面怎麼差這麼多? 

#include

int main(){

    int num = 0;

    while(num != EOF){

    scanf("%d", &num);

        if((num % 4 == 0 && num % 100 != 0) || num % 400 == 0)

            printf("閏年\n");

        else 

            printf("平年");

     } return 0;

}

-----------------------------------------------------------------------

#include

int main(){

    int num;

    while(scanf("%d", &num) != EOF){

        if((num % 4 == 0 && num % 100 != 0) || num % 400 == 0)

            printf("閏年\n");

        else 

            printf("平年");

     } return 0;

}

順序問題

下面表示當輸入num!=end of file執行

上面是先以0作為判斷,每次判斷都會是上筆,

你想想假如你是2000 2001好了,你跑完2000時,你是當num=0的迴圈,2001的時候,是num=2000迴圈,那你EOF那筆根本沒擋,所以就無窮迴圈

#31312: Re: 【C】一直出現TLE,求好心人解答QQ


cges30901 (cges30901)

學校 : 不指定學校
編號 : 30877
來源 : [39.12.66.21]
最後登入時間 :
2025-04-20 17:19:22

為什麼分隔線上面的會TLE,下面的不會? 而且時間好像差了1000倍诶...? scanf直接放while()的判斷裡面怎麼差這麼多? 

#include

int main(){

    int num = 0;

    while(num != EOF){

    scanf("%d", &num);

        if((num % 4 == 0 && num % 100 != 0) || num % 400 == 0)

            printf("閏年\n");

        else 

            printf("平年");

     } return 0;

}

-----------------------------------------------------------------------

#include

int main(){

    int num;

    while(scanf("%d", &num) != EOF){

        if((num % 4 == 0 && num % 100 != 0) || num % 400 == 0)

            printf("閏年\n");

        else 

            printf("平年");

     } return 0;

}

順序問題

下面表示當輸入num!=end of file執行

上面是先以0作為判斷,每次判斷都會是上筆,

你想想假如你是2000 2001好了,你跑完2000時,你是當num=0的迴圈,2001的時候,是num=2000迴圈,那你EOF那筆根本沒擋,所以就無窮迴圈


而且判斷的東西錯了,是要判斷scanf回傳的值是否是EOF(通常是-1),而不是num是否是EOF,兩個是不同的東西。遇到EOF的話,num的值應該是不會改變的