1087 有多少不同的值——C++實現
阿新 • • 發佈:2018-12-01
題目
1087 有多少不同的值 (20 point(s))
當自然數 n 依次取 1、2、3、……、N 時,算式 ⌊n/2⌋+⌊n/3⌋+⌊n/5⌋ 有多少個不同的值?(注:⌊x⌋ 為取整函式,表示不超過 x 的最大自然數,即 x 的整數部分。)
輸入格式:
輸入給出一個正整數 N(2≤N≤104)。
輸出格式:
在一行中輸出題面中算式取到的不同值的個數。
輸入樣例:
2017
輸出樣例:
1480
演算法
題目不難。由於相同的數字只統計一次,用set天然適合,見程式碼2。用map也可以,見程式碼1.
程式碼
1、map
#include <iostream>
#include <map>
using namespace std;
int main(){
int N; cin>>N;
map<int,int> cnt;
for(int i=1;i<=N;i++)
if(cnt[i/2+i/3+i/5]) cnt[i/2+i/3+i/5]++;
cout<<cnt.size();
return 0;
}
2、set
#include <iostream> #include <set> using namespace std; int main(){ int N; cin>>N; set<int> s; for(int i=1;i<=N;i++) s.insert(i/2+i/3+i/5); cout<<s.size(); return 0; }