C++洛谷题解(35)——P1980

题目信息

题名:计数问题

题目:试计算在区间 1 到 n 的所有整数中,数字 x(0≤x≤9)共出现了多少次?例如,在 1 到 11 中,即在 1,2,3,4,5,6,7,8,9,10,11 中,数字 1 出现了 4 次。

输入格式:2 个整数 n,x,之间用一个空格隔开。

输出格式:1 个整数,表示 x 出现的次数。

输入样例:11 1

输出样例:4

​​​​​​​说明提示:对于 100% 的数据,1≤n≤10⁶,0≤x≤9。

分析题目

怎么感觉这道题特别熟悉?貌似在哪里做过,但是哪里都没有记录。嘶,在哪呢?好吧,忘了,有可能是在梦里吧。(纯属凑字)

这道题光看题很简单,不就统计吗。结果写的时候懵了。后来反应了一会后又很简单。这道题需要将每个数的数据都拆开,再计数。不过这就很简单,%10和/10的事吗。

好了,直接说思路吧:

  1. 创建变量n,x,b,c,t。其中t初始化为0
  2. 输入n和x
  3. 遍历1~n之间的数
  4. 为了不破坏i,所以用b来替代一下
  5. 只要b不是0就循环
  6. 用%10的方法求出当前位上的数
  7. 用/10的方法去掉当前位上的数
  8. 如果c==x那么t累加
  9. 最后输出t的值

OK,直接上代码吧

示例代码

注释版:

#include <bits/stdc++.h> //万能头
using namespace std;
int main()
{
    int n, x, b, c, t = 0;       //变量n和x。b和c后期使用。t为结果
    cin >> n >> x;               //输入n和x
    for (int i = 1; i <= n; i++) //循环n遍
    {
        b = i;         //为了不破坏i,所以用b来代替
        while (b != 0) //只要b不等于0就无限循环
        {
            c = b % 10; //求出当前位上的数字
            b = b / 10; //去掉当前位上的数
            if (c == x) //如果获取的数和x相等
            {
                t++; // t累加
            }
        }
    }
    cout << t << endl; //输出t的值
    system("pause");   //算了,不说了,都知道了
    return 0;          //结束
}

复制版:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n, x, b, c, t = 0;
    cin >> n >> x;
    for (int i = 1; i <= n; i++)
    {
        b = i;
        while (b != 0)
        {
            c = b % 10;
            b = b / 10;
            if (c == x)
            {
                t++;
            }
        }
    }
    cout << t << endl;
    system("pause");
    return 0;
}
posted @ 2022-07-19 19:46  GitTJBKBeta  阅读(41)  评论(0编辑  收藏  举报