c++Python特殊回文数

25101 ワード

問題記述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++
#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が解釈言語である可能性があります.