回覆列表
  • 1 # 使用者7222317949811

    Time Limit Exceed,即超時,主要可能是輸入輸出時邏輯不對或程式碼邏輯中存在死迴圈。

    不幸你程式碼中這兩個原因都存在:

    首先題目中已經明確說明第一行是T,即T只會輸入一次,無需用while(scanf("%d",&T)!=EOF),否則可能導致輸入超時, 改成 scanf("%d", &T);

    然後主迴圈中沒有考慮特殊情況,比如如果m為偶數或m的尾數為5則不存在n個1組成的數字是m的倍數,在你程式碼中就是死迴圈了;

    再然後,就算不是特殊情況,n也可能很大,比如k=1237時n=206,int型的m根本儲存不了,會發生多次溢位,一旦溢位則也可能造成死迴圈。

    可以參考如下程式碼:

    #include <stdio.h>int main(){ int c, n, m, r, p; scanf("%d", &c); while(c--) { scanf("%d", &m); if(!(m&1) || (m%10==5)) { printf("-1\n"); continue; } p = 1; r = 1; n = 1; while(r%m != 0) { p = p*10%m; r = (r+p)%m; n++; } printf("%d\n", n); } return 0;}

  • 中秋節和大豐收的關聯?
  • 以盡力為話題寫作文?