题目

当自然数 $n$ 依次取 1、2、3、……、 $N$ 时,算式 $\lfloor n/2\rfloor +\lfloor n/3\rfloor +\lfloor n/5\rfloor$ 有多少个不同的值?(注: $\lfloor x\rfloor$ 为取整函数,表示不超过 $x$ 的最大自然数,即 $x$ 的整数部分。)

输入格式:

输入给出一个正整数 $N$ ( $2 \le N \le 10^4$ )。

输出格式:

在一行中输出题面中算式取到的不同值的个数。

输入样例:

1
2017

输出样例:

1
1480

思路

大致思路:

题目的向下取整,和C语言中的整数除法是相同的,所以用C语言的话,直接除就好了。

当n增大时,所求的算式也是非递减的,所以技巧就是,当算式的值比之前增大时,计数增加即可。

实现很简单。

代码

Github最新代码,欢迎交流

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>

int main()
{
	int N, n, m, m0 = -1, count = 0;

	scanf("%d", &N);

	for (n = 1; n <= N; n++) {
		m = n / 2 + n / 3 + n / 5;
		if (m > m0)
			count++;
		m0 = m;
	}

	printf("%d", count);

	return 0;
}