回文番号[ブルーブリッジカップ]

タイトルリンク:回文番号[ブルーブリッジカップ]
時間制限:1秒メモリ制限:256 MB

タイトルの説明:
観測番号:12321と123321には共通の特徴があります。左から右に読み取っても、右から左に読み取っても、同じです。
このような番号は、回文番号と呼ばれます。
この質問では、5桁または6桁の10進数を見つける必要があります。次の要件を満たします。
数値の桁の合計が入力整数と等しい。

入力:
正の整数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

おすすめ

転載: blog.csdn.net/weixin_43883917/article/details/108736534