【最优解法】1087 有多少不同的值 (20分)_17行代码AC
生活随笔
收集整理的這篇文章主要介紹了
【最优解法】1087 有多少不同的值 (20分)_17行代码AC
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
立志用最少的代碼做最高效的表達
PAT乙級最優題解——>傳送門
當自然數 n 依次取 1、2、3、……、N 時,算式 ?n/2?+?n/3?+?n/5? 有多少個不同的值?(注:?x? 為取整函數,表示不超過 x 的最大自然數,即 x 的整數部分。)
輸入格式:
輸入給出一個正整數 N(2≤N≤104)。
輸出格式:
在一行中輸出題面中算式取到的不同值的個數。
輸入樣例:
2017
輸出樣例:
1480
分析
我采用的是打表法,從小至大, 每一個數字的結果建立在前一個數字之上。 時間復雜度為O(n)
第一次提交出現了段錯誤, 仔細思考后發現, ?n/2?+?n/3?+?n/5?是可以大于n的。
于是加了限定條件,再次提交。 最后一個測試點錯誤。
原因: 當n取10000時,需要我們計算的是N=10333的值,因此數組的范圍需要大于10333。擴大數組后,AC。
代碼
#include<bits/stdc++.h> #define Max 11010 using namespace std; int a[Max], b[Max]; int main() {for(int i = 1; i < Max; i++) {b[i] = b[i-1]; int x = (int)(i/2.0) + (int)(i/3.0) + (int)(i/5.0);if(x<Max && a[x] == 0) {a[x] = 1; b[i] += 1;} }int n; cin >> n;cout << b[n] << '\n';return 0; }耗時
博主碎碎念:PAT沖沖沖! ACM沖沖沖!
總結
以上是生活随笔為你收集整理的【最优解法】1087 有多少不同的值 (20分)_17行代码AC的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【最简便解法】1086 就不告诉你 (1
- 下一篇: 【测试点分析】1088 三人行 (20分