问题描述
首先给出简单加法算式的定义: 如果有一个算式(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;
}