c++Python特殊回文数
問題記述123321は、左から読むのと右から読むのと同じ非常に特殊な数である.正の整数nを入力し、プログラムはこのような5桁と6桁の10進数をすべて求め、各数字の和がnに等しいことを満たす.入力フォーマット正の整数nを含む行を入力します.出力フォーマットは、条件を満たす整数を小さい順に出力し、各整数が1行を占める.サンプル入力52サンプル出力899998 989989 998899データ規模と約1<=n<=54.
考え方:
方法1:暴力法で要求されるのは5桁と6桁で、10000から1000000(含まない)まで条件に合致する数を探して、各桁の数字の累積とnに等しい.この方法は簡単で乱暴だが,時間がかかる.
方法2:先生成回文数、五桁abcba、六桁abccba一、五桁abcba:1.この5つの数の和はnに等しいが、平均数は9を超えることができず、9を超えない場合は下向きに実行し続け、そうでない場合は実行しない.1位は0ではなく、1から3.条件:a+b+c+b+a=nからcを求める、cは0~9の間の数であり、満足すればabcbaを出力し、そうでなければ二、六桁abccba:1を出力しない.この6個の数の和がnに等しい場合、nは必ず偶数であり、平均数は9を超えることができず、nは偶数であり、9を超えない場合は下向きに実行し続け、そうでない場合は実行しない.1位は0ではなく、1から3.条件:a+b+c+c+b+a=nからcを求め、cは0~9の数であり、満足すればabccbaを出力し、そうでなければ出力しない
c++
方法1:最良または最悪にかかわらず、サイクル数は100000-10000回である方法2:最悪の場合、サイクル数は9 x 10 x 2注:平均数が9以下の場合、(n/5)と(n/6)は整数で小数まで取れず、(n/5.0)と(n/6.0)は小数まで取れ、不要なサイクルを避ける
python
方法1:Python言語の使用はc++より便利で簡単であるが、内蔵関数str()、int()を繰り返し呼び出すことで実行に時間がかかるため、プログラムはたまにタイムアウトする方法2:考え方は同じで、c++と同様に最も基本的な文を使用するため、Python言語の使用とc++の差は大きくないが、ここでは両者の違いを見ることができ、同じプログラムc++の消費時間はpyhtonより短く、これはc++がコンパイル言語でPythonが解釈言語である可能性があります.
考え方:
方法1:暴力法で要求されるのは5桁と6桁で、10000から1000000(含まない)まで条件に合致する数を探して、各桁の数字の累積とnに等しい.この方法は簡単で乱暴だが,時間がかかる.
方法2:先生成回文数、五桁abcba、六桁abccba一、五桁abcba:1.この5つの数の和はnに等しいが、平均数は9を超えることができず、9を超えない場合は下向きに実行し続け、そうでない場合は実行しない.1位は0ではなく、1から3.条件:a+b+c+b+a=nからcを求める、cは0~9の間の数であり、満足すればabcbaを出力し、そうでなければ二、六桁abccba:1を出力しない.この6個の数の和がnに等しい場合、nは必ず偶数であり、平均数は9を超えることができず、nは偶数であり、9を超えない場合は下向きに実行し続け、そうでない場合は実行しない.1位は0ではなく、1から3.条件:a+b+c+c+b+a=nからcを求め、cは0~9の数であり、満足すればabccbaを出力し、そうでなければ出力しない
c++
#include
using namespace std;
int main()
{
//
int n;
int t;
int a,b,c,d,e,f;
cin>>n;
for(int i=10000; i<100000; i++) //
{
t = i;
a=t%10;
t = t/10;
b=t%10;
t = t/10;
c=t%10;
t = t/10;
d=t%10;
t = t/10;
e=t%10;
if(a==e && b==d && a+b+c+d+e==n)
cout<<i<<endl;
}
for(int i=100000; i<1000000; i++) //
{
t = i;
a=t%10;
t = t/10;
b=t%10;
t = t/10;
c=t%10;
t = t/10;
d=t%10;
t = t/10;
e=t%10;
t = t/10;
f=t%10;
if(a==f && b==e && c==d && a+b+c+d+e+f==n)
cout<<i<<endl;
}
/***************************************************************************/
//
int n;
int a,b,c;
cin>>n;
// : abcba
if((n/5.0)<=9)// n, (n/5.0) 9
{
for(a=1; a<=9; a++)// 0, 1
{
for(b=0; b<=9; b++)
{
c = n - 2*a - 2*b;// :a+b+c+b+a=n c
if(0<=c && c<=9)//c 0~9
cout<<a<<b<<c<<b<<a<<endl;
}
}
}
// : abccba
if((n/6.0)<=9 && n%2==0)
// n, n , (n/6.0) 9
{
for(a=1; a<=9; a++)// 0, 1
{
for(b=0; b<=9; b++)
{
c = (n - 2*a - 2*b)/2;// :a+b+c+c+b+a=n c
if(0<=c && c<=9)//c 0~9
cout<<a<<b<<c<<c<<b<<a<<endl;
}
}
}
return 0;
}
方法1:最良または最悪にかかわらず、サイクル数は100000-10000回である方法2:最悪の場合、サイクル数は9 x 10 x 2注:平均数が9以下の場合、(n/5)と(n/6)は整数で小数まで取れず、(n/5.0)と(n/6.0)は小数まで取れ、不要なサイクルを避ける
python
#
n = int(input())
for i in range(10000,1000000):
mystr = str(i)
if i<100000:#
count = (int(mystr[0]) + int(mystr[1]))*2 + int(mystr[2])
if(mystr[0]==mystr[4] and mystr[1]==mystr[3] and count==n):
print(i)
else:#
count = (int(mystr[0]) + int(mystr[1]) + int(mystr[2]))*2
if(mystr[0]==mystr[5] and mystr[1]==mystr[4] and mystr[2]==mystr[3] and count==n):
print(i)
###########################################################################
#
n = int(input())
# :abcba
if n/5<=9:
for a in range(1,10):
for b in range(0,10):
c = n - 2*a - 2*b
if 0<=c and c<=9:
print('{0}{1}{2}{3}{4}'.format(a,b,c,b,a))
# :abccba
if n/6<=9 and n%2==0:
for a in range(1,10):
for b in range(0,10):
c= (n - 2*a - 2*b)//2
if 0<=c and c<=9:
print('{0}{1}{2}{3}{4}{5}'.format(a,b,c,c,b,a))
方法1:Python言語の使用はc++より便利で簡単であるが、内蔵関数str()、int()を繰り返し呼び出すことで実行に時間がかかるため、プログラムはたまにタイムアウトする方法2:考え方は同じで、c++と同様に最も基本的な文を使用するため、Python言語の使用とc++の差は大きくないが、ここでは両者の違いを見ることができ、同じプログラムc++の消費時間はpyhtonより短く、これはc++がコンパイル言語でPythonが解釈言語である可能性があります.