蓝桥杯 简单加法(基本型)

问题描述
  首先给出简单加法算式的定义:
  如果有一个算式(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 }
原文地址:https://www.cnblogs.com/fx1998/p/12691491.html