迴文數位[藍橋杯]

2020-09-24 08:18:01

題目連結:迴文數位[藍橋杯]
時間限制: 1 Sec 記憶體限制: 256 MB

題目描述:
觀察數位:12321,123321 都有一個共同的特徵,無論從左到右讀還是從右向左讀,都是相同的。
這樣的數位叫做:迴文數位。
本題要求你找到一些5位或6位的十進位制數位。滿足如下要求:
該數位的各個數位之和等於輸入的整數。

輸入:
一個正整數 n (10<n<100), 表示要求滿足的數位和。

輸出:
若干行,每行包含一個滿足要求的5位或6位整數。數位按從小到大的順序排列。
如果沒有滿足條件的,輸出:-1

樣例輸入
45
樣例輸出
99999

題意:判斷一個數(10000<=num<=999999)是否為迴文數並且數位和等於輸入的數。
思路:遍歷判斷即可。

如何判斷?
在這裡插入圖片描述

上程式碼:

int palindrome(int x)
{
    int px=0,xx=x; // px:x倒序的結果 xx:記錄x
    int ans=0; //ans:數位和結果
    while(x)
    {
        px = px*10+x%10;
        ans += x%10;
        x /= 10;
    }
    if(px==xx) // x為迴文數
        return ans;  // 返回數位和
    else
        return -1;
}

用px存著倒序的結果,ans存著數位和,並且判斷是否為迴文(用px與xx對比),如果是直接返回數位和,再把返回的數位和與輸入的數對比,如果相等就證明符合要求,輸出即可。

聰明的你一定看懂了吧?
在這裡插入圖片描述

完整程式碼:

#include<bits/stdc++.h>
using namespace std;
int palindrome(int x)
{
    int px=0,xx=x; // px:x倒序的結果 xx:記錄x
    int ans=0; //ans:數位和結果
    while(x)
    {
        px = px*10+x%10;
        ans += x%10;
        x /= 10;
    }
    if(px==xx) // x為迴文數
        return ans;  // 返回數位和
    else
        return -1;
}
int main()
{
    int n;
    while(cin>>n)
    {
        int flag=0; // 設定一個標記,標記是非有符合條件的迴文數
        for(int i=10000; i<=999999; i++)
        {
            if(palindrome(i)==n)  // i為迴文數並且數位和等於輸入的n
            {
                flag=1;
                cout<<i<<endl;
            }
        }
        if(flag==0)
            cout<<-1<<endl;
    }
    return 0;
}

小可愛們看完別忘了點贊喲,謝謝支援!
在這裡插入圖片描述

加油!

共同努力!

Keafmd