#15971: 為什麼一直TLE


timmy940410 (遊艇)

學校 : 臺北市私立延平高級中學
編號 : 69053
來源 : [122.116.197.27]
最後登入時間 :
2021-02-19 11:39:00
d817. Pascal's triangle's secret (I) | From: [114.32.213.13] | 發表日期 : 2018-11-08 22:07

#include<stdio.h>
int main(){
int n;
while(scanf("%d",&n)){
int a[2000]={0};
int i,j,max=0,carry=0;
a[max]=1;
for(i=1;i<=n;i++){
for(j=0;j<=max;j++){
a[j]=a[j]*2+carry;
if((carry=a[j]/10)!=0&&j==max) max++;
a[j]=a[j]%10;
}
}
for(i=max;i>=0;i--) printf("%d",a[i]);
printf("\n");
}
}

 
#15975: Re:為什麼一直TLE


OwO310659 (OwO)

學校 : 新北市立板橋高級中學
編號 : 58647
來源 : [118.150.111.60]
最後登入時間 :
2024-04-25 01:16:40
d817. Pascal's triangle's secret (I) | From: [106.105.27.148] | 發表日期 : 2018-11-08 22:35

目前看到的問題有2個:

1. scanf() 讀到 EOF(End of File, 檔案結尾) 會回傳 EOF ,
  EOF 在 <stdio.h> 中被定義的數值是 -1 ,
  由於 -1 被轉成 bool 會是 true ,
  所以你的程式會不停回傳 EOF 而形成無限迴圈~

2. 你的方法是每次讀入一個 N 就要 1 開始一直往上算,
  但你會發現在計算時其實就會包含 0~N-1 的答案,
  所以可以一開始直接計算N=5000並將 0~5000 的答案建表儲存起來,
  這樣才不會作重複的計算而拖慢時間~

以上希望有幫助到你~ OwO

 
#15991: Re:為什麼一直TLE


timmy940410 (遊艇)

學校 : 臺北市私立延平高級中學
編號 : 69053
來源 : [122.116.197.27]
最後登入時間 :
2021-02-19 11:39:00
d817. Pascal's triangle's secret (I) | From: [114.32.213.13] | 發表日期 : 2018-11-10 17:12

目前看到的問題有2個:

1. scanf() 讀到 EOF(End of File, 檔案結尾) 會回傳 EOF ,
  EOF 在 中被定義的數值是 -1 ,
  由於 -1 被轉成 bool 會是 true ,
  所以你的程式會不停回傳 EOF 而形成無限迴圈~

2. 你的方法是每次讀入一個 N 就要 1 開始一直往上算,
  但你會發現在計算時其實就會包含 0~N-1 的答案,
  所以可以一開始直接計算N=5000並將 0~5000 的答案建表儲存起來,
  這樣才不會作重複的計算而拖慢時間~

以上希望有幫助到你~ OwO



謝謝

 
ZeroJudge Forum