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


shimotsukimineko (霜月みねこ)

學校 : 不指定學校
編號 : 196346
來源 : [114.24.36.68]
最後登入時間 :
2023-12-05 17:48:25
a004. 文文的求婚 | From: [114.45.54.54] | 發表日期 : 2022-07-21 22:53

為什麼分隔線上面的會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
來源 : [1.173.159.232]
最後登入時間 :
2024-06-06 10:31:47
a004. 文文的求婚 | From: [106.64.137.183] | 發表日期 : 2022-07-22 09:58

為什麼分隔線上面的會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.9.74.255]
最後登入時間 :
2024-10-14 22:20:08
a004. 文文的求婚 | From: [106.64.177.211] | 發表日期 : 2022-07-23 14:09

為什麼分隔線上面的會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的值應該是不會改變的

 
ZeroJudge Forum