藍橋杯 【基礎練習】 特殊迴文數

丁棒兒發表於2014-01-25

問題一:迴文數

問題描述
  1221是一個非常特殊的數,它從左邊讀和從右邊讀是一樣的,程式設計求所有這樣的四位十進位制數。
輸出格式
  按從小到大的順序輸出滿足條件的四位十進位制數。

思路:分別求出這個四位數的每一個位上的數,然後做比較

#include<iostream>
using namespace std;
int main()
{
    for(int n=1000;n<10000;n++)
    {
        int a = n/1000;                 //a是千位
        int b = (n - a*1000)/100;       //b是百位
        int c = (n - a*1000 - b*100)/10;//c是十位 
        int d = (n - a*1000 - b*100)%10;//d是個位  
        if(a == d&&b == c)
        {
            cout<<n<<endl;
        }
    }
    return 0;
}

問題二:特殊迴文數

問題描述
  123321是一個非常特殊的數,它從左邊讀和從右邊讀是一樣的。
  輸入一個正整數n, 程式設計求所有這樣的五位和六位十進位制數,滿足各位數字之和等於n 。
輸入格式
  輸入一行,包含一個正整數n。
輸出格式
  按從小到大的順序輸出滿足條件的整數,每個整數佔一行。
樣例輸入
52
樣例輸出
899998
989989
998899
資料規模和約定
  1<=n<=54。

思路:特殊迴文數不但要求該數字為迴文數,還要求該數字每一位數字的和相加等於一個數,而且該題目包含了四位和五位數

#include<iostream>
using namespace std;
int main()
{
	int m;
	cin>>m;
	for(long n=10000;n<100000;n++)
	{
		int a = n/10000;				//第一個
		int b = (n - a*10000)/1000;			//第二個
		int c = (n - a*10000 - b*1000)/100;		//第三個
		int d = (n - a*10000 - b*1000 - c*100)/10;	//第四個
		int e = (n - a*10000 - b*1000 - c*100)%10;	//第五個	 
		if(a == e && b == d)	//是否為迴文數 
		{
			if(a+b+c+d+e == m)	//是否為五位特殊迴文數 
			{
				cout<<n<<endl;	
			} 
		} 
	}
	for(long n=100000;n<1000000;n++)
	{
		int a = n/100000;					//第一個
		int b = (n - a*100000)/10000;				//第二個
		int c = (n - a*100000 - b*10000)/1000;			//第三個
		int d = (n - a*100000 - b*10000 - c*1000)/100;		//第四個
		int e = (n - a*100000 - b*10000 - c*1000 - d*100)/10;	//第五個	
		int f = (n - a*100000 - b*10000 - c*1000 - d*100)%10;	//第六個
		if(a ==f && b ==e && c == d)	//是否為迴文數 
		{
			if((a+b+c+d+e+f) == m)		//是否為六位特殊迴文數 
			{
				cout<<n<<endl;				
			}
		} 
	}	
	return 0;
}

比較:問題二的數字和計算量都大於第一個,通過cpu使用的時間上就可以看出來

提交序號 姓名 試題名稱 提交時間 
程式碼長度 CPU使用 
記憶體使用 
評測詳情
53642 趙哲 特殊迴文數 01-25 22:58 910B C++ 正確 100 31ms 860.0KB 評測詳情
53264 趙哲 迴文數 01-25 18:39 324B C++ 正確 100 0ms 860.0KB 評測詳情


相關文章