问题描述
首先给出简单加法算式的定义:
如果有一个算式(i)+(i+1)+(i+2),(i>=0),在计算的过程中,没有任何一个数位出现了进位,则称其为简单的加法算式。
例如:i=3时,3+4+5=12,有一个进位,因此3+4+5不是一个简单的加法算式;又如i=112时,112+113+114=339,没有在任意数位上产生进位,故112+113+114是一个简单的加法算式。
问题:给定一个正整数n,问当i大于等于0且小于n时,有多少个算式(i)+(i+1)+(i+2)是简单加法算式。其中n<10000。
如果有一个算式(i)+(i+1)+(i+2),(i>=0),在计算的过程中,没有任何一个数位出现了进位,则称其为简单的加法算式。
例如:i=3时,3+4+5=12,有一个进位,因此3+4+5不是一个简单的加法算式;又如i=112时,112+113+114=339,没有在任意数位上产生进位,故112+113+114是一个简单的加法算式。
问题:给定一个正整数n,问当i大于等于0且小于n时,有多少个算式(i)+(i+1)+(i+2)是简单加法算式。其中n<10000。
输入格式
一个整数,表示n
输出格式
一个整数,表示简单加法算式的个数
样例输入、
4
样例输出
3
看不懂题目啥意思系列- -
题目的含义简单翻译一下就是:三个连续的数相加,要满足三个数对应个位,十位,百位,千位,每一位(如果有的话)上的三个数字相加小于等于9.
比如112+113+114=339。
个位:2+3+4=9,没有进位
十位:1+1+1=3,没有进位
百位:1+1+1=3,没有进位,符合题意。
比如3+4+5=12就进位了,不符合题意。
理解题意后就可以暴力枚举了,代码很好理解。
转载自https://blog.csdn.net/qq_39671636/article/details/79187975
注意当i = 132,i + 1 = 133, i + 2 = 134时也是满足的。
132 + 133 + 134 = 399。每一位都没有进位。我做题时错在这了
1 #include <bits/stdc++.h> 2 using namespace std; 3 bool check(int num) { 4 int num2 = num + 1; 5 int num3 = num + 2; //三个数 6 int sum; //存储相同数位上的和 7 while (num3) { //因为num3是这三个数中数位最多的,比如98,99,100。当然98,99,100不满足题意 8 sum = num % 10 + num2 % 10 + num3 % 10; //计算个位的和,再计算十位的和,等等等等 9 if (sum >= 10) { //只要有一个数位上大于10了,就gg 10 return false; 11 } 12 num /= 10; 13 num2 /= 10; 14 num3 /= 10; //三个数都/=10,数位降一位 15 } 16 return true; //能走到这,说明每一位上都没有进位 17 } 18 int main() { 19 int n; 20 cin >> n; 21 int cnt = 0; //计数器 22 for (int i = 0; i < n; i++) { 23 if (check(i)) { 24 cnt++; 25 } 26 } 27 cout << cnt << endl; 28 return 0; 29 }