藍橋杯 演算法訓練 - 簡單加法(基本型) 首先給出簡單加法算式的定義:   如果有一個算式(i)+(i+1)+(i+2),(i>=0),在計算的過程中,沒有任何一個數位出現了進位,則稱其為簡單的加

伏城無嗔發表於2020-10-08

問題描述

首先給出簡單加法算式的定義:
  如果有一個算式(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;
 } 

相關文章