欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

小韦老师@神犇营-my0117-数 1 的个数

程序员文章站 2024-03-15 16:03:06
...

小韦老师@神犇营-my0117-数 1 的个数

题目:

描述

给定一个正整数 n,数数从 1 到 n 的所有整数中,出现的数字 1 的个数。

例如当 n = 2 时,有数字 1, 2,这里只出现了一个数字 1;当 n = 12 时,有数字 1,2,3,4,5,6,7,8,9,10,11,12,这里出现了五个数字 1。

输入

输入仅一行,为正整数 n (1 <= n <= 10000)。

输出

输出仅一行,为一个正整数,即数字 1 的个数。

输入样例1

12

输出样例1

5

思路:

整体思路:
枚举 1~n,将每个数有的 1 的个数都加起来即可。
具体步骤:
1.定义 n,并且输入 n。
2.定义一个 int 型的变量 sum 作为累加器,用来存储总的有多少个 1,初
始化为 0。
3.用 for 循环枚举 1~n,对于当前的数进行数 1 的个数 cnt ,并将 cnt 累
加到 sum 中。

    for (int i = 1; i <= n; i++) {  // 枚举 1~n 
        // 计数器,用来存储当下的数 i 有几个 1,记得初始化为 0 
        int cnt = 0; 
        int t = i;  // 备份 i,记得不要直接对 i 进行处理 
        while (t != 0) {  // 当 t 不等于 0 时 
            if (t % 10 == 1) {  // 当 t 的最右边一位为 1 时 
                cnt++;  // 计数器加 1 
            }
            t /= 10;  // 将 t 处理过的位数“划掉” 
        }
        sum += cnt;  // 将当前数 i 有的 1 的个数累加到累加器中 
    } 

4.输出累加器。
思考:
1°cnt 为什么要初始化为 0?可以不初始化麽?可以在 for 循环外面初始
化麽?
2°为什么要将 i 备份?不备份会有什么问题?

完整代码:

#include <bits/stdc++.h>

using namespace std;

int main() {

	int n;
	cin >> n;
	int sum = 0;  // 累加器,用来存储总的有多少个 1 
	for (int i = 1; i <= n; i++) {  // 枚举 1~n 
		// 计数器,用来存储当下的数 i 有几个 1,记得初始化为 0 
		int cnt = 0; 
		int t = i;  // 备份 i,记得不要直接对 i 进行处理 
		while (t != 0) {  // 当 t 不等于 0 时 
			if (t % 10 == 1) {  // 当 t 的最右边一位为 1 时 
				cnt++;  // 计数器加 1 
			}
			t /= 10;  // 将 t 处理过的位数“划掉” 
		}
		sum += cnt;  // 将当前数 i 有的 1 的个数累加到累加器中 
	}
	// 输出累加器 
	cout << sum;
	
	return 0;

}