#11176: 難道C++語法跟C差那麼多??


CSE210617 (A_A)

學校 : 國立臺中高級工業職業學校
編號 : 38161
來源 : [122.116.151.243]
最後登入時間 :
2020-03-24 10:55:48
d709. 判断质数(一) -- 判断质数系列 | From: [114.41.30.142] | 發表日期 : 2016-07-15 18:07

在a007.判斷質數吃了無數次TLE後,也學著用建表的方法過了,在d705.判断质数(二)也用原本的程式碼並修改數值通關,但是到了這題卻怎樣都過不了QAQ

 

因為已使用建表卻還是TLE,因此我就試著改用cin改scanf , cout改printf竟然就AC了....,以下我就節錄main的部分(建表與判斷我都寫成自訂函數,且更改並未觸及)

 

1.完全使用C++----TLE

int main()
{  int x;
    find_prime();
    while(cin>>x)
   {   if(x==0) break;
        if(answer(x))     cout<<0<<endl;
        else                   cout<<1<<endl;
   }
return 0;
}

 

2.cin改scanf , cout改printf----AC(0.2s, 96KB)

int main()
{  int x;
    find_prime();
    while(scanf("%d",&x)!=EOF)
    {  if(x==0) break;
        if(answer(x))      printf("0\n");
        else                    printf("1\n");
    }
return 0;
}

 

3.將printf改回cout,但cout又分成輸出 "字串" 和輸出數字

"字串"版----AC(0.2s, 88KB)

int main()
{   int x;
     find_prime();
     while(scanf("%d",&x)!=EOF) 
     {   if(x==0) break;
          if(answer(x))       cout<<"0\n";
          else                     cout<<"1\n";
     }
return 0;
}

 

數字版----TLE

int main()
{   int x;
     find_prime();
     while(scanf("%d",&x)!=EOF) 
     {   if(x==0) break;
          if(answer(x))        cout<<0<<endl;
          else                      cout<<1<<endl;
     }
return 0;
}

 

4.將AC版之scanf又改回cin----TLE

int main()
{   int x;
     find_prime();
     while(cin>>x) 
     {   if(x==0) break;
          if(answer(x))      cout<<"0\n";
          else                    cout<<"1\n";
     }
return 0;
}

 

最終結論:在輸入部分只有使用while(scanf("%d",&x)!=EOF)時才能AC , 而在輸出部分只有輸出"字串"才能AC , 並沒有cout與printf之分 , 但當cout直接輸

出數字卻會造成TLE , 請問有人知道為什麼嘛QAQ???

 
#14946: Re:難道C++語法跟C差那麼多??


314159265358979323846264338327 ... (少年π)

學校 : 臺北市私立延平高級中學
編號 : 69058
來源 : [223.136.179.30]
最後登入時間 :
2024-04-29 19:11:35
d709. 判断质数(一) -- 判断质数系列 | From: [114.136.109.216] | 發表日期 : 2018-08-18 17:46

在a007.判斷質數吃了無數次TLE後,也學著用建表的方法過了,在d705.判断质数(二)也用原本的程式碼並修改數值通關,但是到了這題卻怎樣都過不了QAQ

 

因為已使用建表卻還是TLE,因此我就試著改用cin改scanf , cout改printf竟然就AC了....,以下我就節錄main的部分(建表與判斷我都寫成自訂函數,且更改並未觸及)

 

1.完全使用C++----TLE

int main()
{  int x;
    find_prime();
    while(cin>>x)
   {   if(x==0) break;
        if(answer(x))     cout<<0<<endl;
        else                   cout<<1<<endl;
   }
return 0;
}

 

2.cin改scanf , cout改printf----AC(0.2s, 96KB)

int main()
{  int x;
    find_prime();
    while(scanf("%d",&x)!=EOF)
    {  if(x==0) break;
        if(answer(x))      printf("0\n");
        else                    printf("1\n");
    }
return 0;
}

 

3.將printf改回cout,但cout又分成輸出 "字串" 和輸出數字

"字串"版----AC(0.2s, 88KB)

int main()
{   int x;
     find_prime();
     while(scanf("%d",&x)!=EOF) 
     {   if(x==0) break;
          if(answer(x))       cout<<"0\n";
          else                     cout<<"1\n";
     }
return 0;
}

 

數字版----TLE

int main()
{   int x;
     find_prime();
     while(scanf("%d",&x)!=EOF) 
     {   if(x==0) break;
          if(answer(x))        cout<<0<<endl;
          else                      cout<<1<<endl;
     }
return 0;
}

 

4.將AC版之scanf又改回cin----TLE

int main()
{   int x;
     find_prime();
     while(cin>>x) 
     {   if(x==0) break;
          if(answer(x))      cout<<"0\n";
          else                    cout<<"1\n";
     }
return 0;
}

 

最終結論:在輸入部分只有使用while(scanf("%d",&x)!=EOF)時才能AC , 而在輸出部分只有輸出"字串"才能AC , 並沒有cout與printf之分 , 但當cout直接輸

出數字卻會造成TLE , 請問有人知道為什麼嘛QAQ???

cout比printf慢是因為cout與printf同步,若在程式碼加上ios::sync_with_stdio(false);以關掉同步,cout甚至比printf還快,但在程式中就只能使用cin,cout喔!


 
ZeroJudge Forum