回文になるためのヒント
タイトルリンク:https://ac.nowcoder.com/acm/contest/12794/C
タイトル説明
クールなUCFCS卒業生の1人は、パリンドロームティッパーのグレッグ博士です。回文は
、同じ前後に同じ文字列を読み取る文字列です。たとえば、madam、abba、3、44、525です。Greg
博士のすばらしい点の1つは、外食するときに少なくとも20%のチップを残すことです。食事は30で、グレッグ博士は30を残し、グレッグ博士はチップとして6(30 * .20)を残します。チップ(20%)が整数でない場合、彼はチップを切り上げて整数にします。たとえば、食事が12の場合、20%のチップは12、a202.40(12 * 0.20)になりますが、グレッグ博士はチップに3ドルを残します。
グレッグ博士のもう一つのクールな点は、彼が回文の第一人者であるということです。彼の合計請求額(食事とチップ)が回文でない場合、彼は合計を(チップに追加することによって)増やして、合計を回文にします。もちろん、彼は全体を回文にするために必要な最小限のものを追加します。
問題:
グレッグ博士の食事代を考えると、あなたのプログラムは彼のチップ額(彼の規則に従って)と総請求額を決定する必要があります。
説明を入力してください:
最初の入力行には、グレッグ博士が食べた回数を示す正の整数nが含まれています。食事代は、次のn個の入力行に1行に1つずつあります。各入力には、5〜10000(両端を含む)の整数が含まれます。
出力の説明:
各テストケースの開始時に、「入力コスト:c」を出力します。ここで、cは入力コストです。次に、次の出力行で、チップの金額と合計請求額を1つのスペースで区切って印刷します。各テストケースの出力の後に空白行を残します。
例1
入力
2
12
84
出力
入力コスト:12
10 22
入力コスト:84
17101
本旨:
ヒント=(消費* 0.2)、消費の合計を求め、ヒント=消費よりも大きい回文数の最小数を求めます。
コードは次のように表示されます。
#include<iostream>
#include<string>
using namespace std;
bool judge(int t){
int x=0;
int y=t;
while(t){
x=x*10+t%10;
t/=10;
}
return x==y;
}
int main(){
int T;
scanf("%d",&T);
while(T--){
int n;
scanf("%d",&n);
int cnt = n;
if(n%5==0)
n+=n/5;
else
n+=n/5+1;
while(!judge(n)){
n++;
}
printf("Input cost: %d\n%d %d\n",cnt,n-cnt,n);
printf("\n");
}
return 0;
}