1087、有多少不同的值
ps:一行核心代码在最下面
题目描述
-
当自然数 n 依次取 1、2、3、……、N 时,算式 ⌊n/2⌋+⌊n/3⌋+⌊n/5⌋ 有多少个不同的值?(注:⌊x⌋ 为取整函数,表示不超过 x 的最大自然数,即 x 的整数部分。)
输入输出格式
输入格式:
-
输入给出一个正整数 N(2≤N≤104)。
输出格式:
-
在一行中输出题面中算式取到的不同值的个数。
输入输出样式
输入样例: 2017 输出样例: 1480
分析
这题其实用set好一点,用map多多少少有一点浪费空间,当时也是没想到set
代码示例
//我的代码 #include <iostream> #include <map> using namespace std; int main() { map<int, int> map; int number; cin >> number; for (int i = 1; i <= number; i++) { int sum = i / 2 + i / 3 + i / 5; map.insert(make_pair(sum, 1)); } cout<<map.size()<<endl; return 0; }
//柳神的代码 #include <iostream> #include <set> using namespace std; int main() { int n; scanf("%d", &n); set<int> s; for (int i = 1; i <= n; i++) s.insert(i / 2 + i / 3 + i / 5); printf("%d", s.size()); return 0; }
//数学大佬版,这是正常人可以想到的? #include <iostream> using namespace std; int main() { int n; cin >> n; cout << n / 2 + n / 3 + n / 5 + 1 - n / 6 - n / 10 - n / 15 + n / 30 << endl; return 0; }