给个一个正整数n,请你求出1到n之间所有整数中出现了多少个9
时间: 2023-05-31 11:02:20 浏览: 151
算法1:暴力枚举每个数字,统计9的个数
时间复杂度:O(nlogn)(每个数字最多有log10(n)位)
算法2:数位DP
我们可以用数位DP的思想来解决这个问题。具体做法如下:
1.首先我们将n转换成字符串,方便处理。
2.我们用f[i][0/1/2]表示当前处理到第i位,前面的数字是否已经达到上界(0表示未达到上界,1表示已达到上界但当前位是上界对应的数字,2表示已达到上界且当前位小于上界对应的数字),以及之前已经出现了多少个9。
3.状态转移方程:
若前面的数字已经达到上界,则当前位可以选0~9,分两种情况讨论:
(1)当前位小于上界对应的数字,那么当前位可以任意选,因此有f[i+1][2] = f[i][1] * 10。
(2)当前位等于上界对应的数字,那么当前位只能选0~上界对应的数字,因此有f[i+1][1] = f[i][1] * 上界对应的数字。
若前面的数字未达到上界,则当前位也可以选0~9,但是要判断是否能够选到上界对应的数字,分两种情况讨论:
(1)当前位小于上界对应的数字,那么当前位可以任意选,因此有f[i+1][2] = f[i][0] * 10。
(2)当前位等于上界对应的数字,那么当前位只能选0~上界对应的数字,因此有f[i+1][1] = f[i][0] * 上界对应的数字。
4.最终答案为f[1][2],因为第一位前面没有数字,因此一定未达到上界。
时间复杂度:O(log10(n))
C++代码:
相关问题
c语言写一个代码给个一个正整数n,请你求出1到n之间所有整数中出现了多少个9
```
#include <stdio.h>
int countNine(int n) {
int count = 0;
for (int i = 1; i <= n; i++) {
int num = i;
while (num > 0) {
if (num % 10 == 9)
count++;
num /= 10;
}
}
return count;
}
int main() {
int n;
printf("请输入一个正整数n:");
scanf("%d", &n);
int count = countNine(n);
printf("1到%d之间所有整数中出现了%d个9\n", n, count);
return 0;
}
```
C语言输入一个正整数n,求出并显示2~n之间所有素数的和。
好的,这是一个比较经典的C语言编程题目。下面是解题思路和代码示例:
解题思路:
1. 首先需要判断一个数是否为素数,可以使用循环从2到该数的平方根进行判断,如果该数可以被整除则不是素数。
2. 其次需要输入一个正整数n,然后从2到n遍历每个数,判断是否为素数,如果是素数则加入和中。
3. 最后输出所有素数的和即可。
代码示例:
```c
#include <stdio.h>
#include <math.h>
int is_prime(int n) {
int i;
if (n < 2) return 0;
for (i = 2; i <= sqrt(n); i++) {
if (n % i == 0) {
return 0;
}
}
return 1;
}
int main() {
int n, i, sum = 0;
printf("请输入一个正整数n:");
scanf("%d", &n);
for (i = 2; i <= n; i++) {
if (is_prime(i)) {
sum += i;
}
}
printf("2~%d之间所有素数的和为:%d\n", n, sum);
return 0;
}
```
以上就是一个简单的C语言程序,可以实现输入一个正整数n,求出并显示2~n之间所有素数的和。
相关推荐
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)