蓝桥杯算法训练 - 简单加法(基本型)首先给出简单加法算式的定义:   如果有一个算式(i)+(i+1)+(i+2),(i>=0),在计算的过程中,没有任何一个数位出现了进位,则称其为简单的加

    科技2025-09-28  50

    问题描述

    首先给出简单加法算式的定义:   如果有一个算式(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 提示

    请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。

    所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

    注意: main函数需要返回0 注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。 注意: 所有依赖的函数必须明确地在源文件中 #include , 不能通过工程设置而省略常用头文件。 提交时,注意选择所期望的编译器类型。

    思路

    只需要用一个函数,来判断(i,i+1,i+2)这三个数相加是否需要进位即可。

    代码:

    #include <stdio.h> int num = 0; int judge(int i,int j,int k) { int a,b,c; int flag=1; while(i || j || k) { a=i%10; b=j%10; c=k%10; i/=10; j/=10; k/=10; if(a+b+c>=10) flag=0; } return flag; } int main () { int n; scanf("%d",&n); int i; for(i=0;i<n;i++) { if(judge(i,i+1,i+2)==1) num++; } printf("%d",num); return 0; }
    Processed: 0.013, SQL: 8