1. 程式人生 > >藍橋杯 ALGO-54演算法訓練 簡單加法(基本型)

藍橋杯 ALGO-54演算法訓練 簡單加法(基本型)

時間限制: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);
    }
}