已經很長一段時間沒有ac題了,一周之前報名參加了計算客的編程大賽,雖然我的結果不
是特別理想,但是還是學到了一些東西。下邊,我先貼出題目和對應的程序源碼:
代碼如下:(c語言)
#includeint main() { int n = 0; int i = 0; int totalTime = 0; scanf("%d",&n); int p[n]; if (n >= 1 && n <= 10000) { for (i = 0;i < n;i++) { scanf("%d",&p[i]); } if (n % 2 == 1) { for (i = 0;i < n; i+=2) { totalTime += p[i]; } } else { for (i = 0;i < n-2; i += 2) { totalTime += p[i]; } if (p[n - 1]>p[n - 2]) { totalTime += p[n-1]; } else totalTime += p[n-2]; } printf("%d",totalTime); } return 0; }
代碼分析:細心的你,有可能會發現代碼中出現了這樣的代碼:
int n = 0; scanf("%d",&n); int p[n];
這樣的代碼是通過的嗎?是對的,因為acm用的編譯器是gcc,這還不是重點,gcc中支
持這樣定義數組,還記得在《指針,數組》這篇博客中,我寫到初學者一般會寫出類似
上邊那句的代碼,當時還說是不對的。現在,我糾正,它是在windows下的vs中是不支
持的,但是gcc下允許這樣。
acm考驗的是細心程度,也是希望我們寫出規范的代碼,更有助於提高我們的算法。希
望以後多加練習。