题名:计数问题
题目:试计算在区间 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的事吗。
好了,直接说思路吧:
- 创建变量n,x,b,c,t。其中t初始化为0
- 输入n和x
- 遍历1~n之间的数
- 为了不破坏i,所以用b来替代一下
- 只要b不是0就循环
- 用%10的方法求出当前位上的数
- 用/10的方法去掉当前位上的数
- 如果c==x那么t累加
- 最后输出t的值
OK,直接上代码吧
示例代码注释版:
#include//万能头 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暑期编程PK赛 得CSDN机械键盘等精美礼品!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; }



