天天看點

[C++] 藍橋杯 BASIC-9 特殊回文數

問題描述

  123321是一個非常特殊的數,它從左邊讀和從右邊讀是一樣的。

  輸入一個正整數n, 程式設計求所有這樣的五位和六位十進制數,滿足各位數字之和等于n 。

輸入格式

  輸入一行,包含一個正整數n。

輸出格式

  按從小到大的順序輸出滿足條件的整數,每個整數占一行。

樣例輸入

52

樣例輸出

899998

989989

998899

資料規模和約定

  1<=n<=54

思路分析:

  1. 就在上一題求回文數的基礎上判斷各位上的數字和是否為n

    隻需要修改下judge函數,在取數字時每取出一個計算一下目前數字的和,記錄在sum變量中。

  2. 這個函數我沒有再用flag做标記了,而是做二次判斷。

    第一次:

    當sum!=n時,直接return false;

    第二次:

    開始判斷是否為回文數時,p[j]!=p[i-j-1]即可return false;

    這個函數就完成了。

代碼如下:

#include<iostream>
using namespace std;
bool judge(long long x,int n){
	int p[9];//将一個數中的數字分别提取出來存入數組
	int i=0;
	int sum=0; 
	
	//将數字都提取出來 
	while(x){
		p[i++]=x%10;
		sum+=x%10;
		x/=10;
	} 

	if(sum!=n){
		return false;
	}
	//判斷是否為回文數,這時的i已經記錄了p數組的長度 
	for(int j=0;j<i/2;j++){
		if(p[j]!=p[i-j-1]){
			return false;
			break;
		}
	}
}
int main(){
	int n;
	cin>>n;
	for(long long x=10000;x<1000000;x++)
	{
		if(judge(x,n)){
			printf("%d\n",x);
		}
	}
	return 0;
} 

           

繼續閱讀