时间限制:1.0s 内存限制:512.0MB
问题描述
首先给出简单加法算式的定义:
如果有一个算式(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
【分析】此问题简化之后即为找出满足定义的算式:两个数的每一位数对应相加,都没有产生进位。最后输出算式的个数,可以借用一个中间值,每满足一次,便自增1,最后输出这个中间变量即可。方法可以借用String巧取数的每一位相加。
【参考答案】
C++
#include<iostream>
using namespace std;
int f(int n)
{
if((3*(n%10)+3)>=10)
{
return 0;
}
n/=10;
while(n)
{
if(3*(n%10)>=10)
{
return 0;
}
n/=10;
}
return 1;
}
int main()
{
int n,cnt=0;
int i;
cin>>n;
for(i=0;i<n;i++)
{
if(f(i))
cnt++;
}
cout<<cnt;
return 0;
}
C:
C
#include<stdio.h>
int main(void)
{
int n,i;
int count=0;
int a,b,c,d;
scanf("%d",&n);
for(i=0;i<n;i++)
{
d=i%10;
c=i/10%10;
b=i/100%10;
a=i/1000;
if(a<=2&&b<=2&&c<=2&&d<=2)
count++;
}
printf("%d",count);
return 0;
}
Java:
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sca=new Scanner(System.in);
int n=sca.nextInt();
int i=0;int p=0;
for(;i<n;i++){
int a=i;
int b=i+1;
int c=i+2;
String d=Integer.toString(a);
String e=Integer.toString(b);
String f=Integer.toString(c);
int g=d.charAt(d.length()-1)-48;
int h=e.charAt(e.length()-1)-48;
int j=f.charAt(f.length()-1)-48;
int sum=g+h+j;
if(sum<10){
p++;}
}
System.out.println(p);
}
}