回文数---蓝桥杯算法集

  • 判断是否是回文数:
#include<iostream>
using namespace std;

int main()
{
int n,flag=0,i;
cin>>n;
int str[n];
for(i=0;i<n;i++)
   cin>>str[i];//每输入一个数要用空格隔开
for(i=0;i<n/2;i++)
{
	if(str[i]==str[n-i-1])
	{
		flag=1;
		continue;
	}
	else
	    break;
}
if(flag==1)
  cout<<"YES"<<endl;
else
  cout<<"NO"<<endl;
return 0;
}
  • 范围内找出所有回文数:

问题描述
  1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数。
  
输出格式
  按从小到大的顺序输出满足条件的四位十进制数。

分析
四位十进制回文数,从小到大输出,如果直接从1000到9999循环判断的话,会很浪费时间,由于本题只要求四位,所以我们只要循环前两位直接输出即可。

#include<iostream>
using namespace std;

int main()
{
	int i,j;
	for(i=1;i<=9;i++)
		for(j=0;j<=9;j++)
		   cout<<i*1000+j*100+j*10+i<<endl;
	return 0;
}

一般思路:

#include <iostream>
using namespace std;

int main()
{
	int i;
	for(i=1000;i<10000;i++)
	{
		int a=i/1000;
		int b=(i%1000)/100;
		int c=(i%100)/10;
		int d=i%10;
		if(a==d&&b==c)
		    cout<<i<<endl;
	}
	return 0;
}
  • 特殊的回文数

问题描述
  123321是一个非常特殊的数,它从左边读和从右边读是一样的。
  输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
输入格式
  输入一行,包含一个正整数n。
输出格式
  按从小到大的顺序输出满足条件的整数,每个整数占一行。
样例输入
52
样例输出
899998
989989
998899
数据规模和约定
  1<=n<=54。
分析
方法大致和回文数一样,输出前三位即可,只需判断各位和是否等于n。由于要求各位和等于n,可以根据公式求出第三位的值,去掉一个循环。

要注意五位数和六位数求第三位的值有区别:
{5位数,k=n−2i−2j;
{6位数,2k=n−2i−2j .

并且要求从小到大输出,五位数和六位数的输出一定是分开的,代码如下:

#include <iostream>
using namespace std;

int main()
{
	int n;
	int i, j, k = 0;
	cin >> n;
	for(i = 1; i <= 9; i++)	//五位数 k=n-2*i-2*j
	{
		for(j = 0; j <= 9; j++)
		{
			if(n-2*i-2*j <= 9 && n-2*i-2*j >= 0)
			{
				cout << i*10000 + j*1000 + (n-2*i-2*j)*100+ j*10 + i << endl;
			}
		}
	}
	for(i = 1; i <= 9; i++)	//六位数 2k=n-2*i-2*j=>k=(n-2*i-2*j)/2
	{
		for(j = 0; j <= 9; j++)
		{
			if((n-2*i-2*j) % 2 == 0 && n-2*i-2*j <= 18 && n-2*i-2*j >= 0)
			{
				cout << i*100000 + j*10000 + (n-2*i-2*j)*500 + (n-2*i-2*j)*50+ j*10 + i << endl;
			}
		}
	}
	return 0;
}

一般思路:

#include <iostream>
using namespace std;

int main()
{
	int i,n;
	cin>>n;
	for(i=10000;i<100000;i++)
	{
		int a=i/10000;
		int b=(i%10000)/1000;
		int c=(i%1000)/100;
		int d=(i%100)/10;
		int e=i%10;
		if(a==e&&b==d&&a+b+c+d+e==n)
		cout<<i<<endl;
	}
	for(i=100000;i<1000000;i++)
	{
		int a=i/100000;
		int b=(i%100000)/10000;
		int c=(i%10000)/1000;
		int d=(i%1000)/100;
		int e=(i%100)/10;
		int f=i%10;
		if(a==f&&b==e&&c==d&&a+b+c+d+e+f==n)
		cout<<i<<endl;
	}
	return 0;
}
发布了106 篇原创文章 · 获赞 53 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_43595030/article/details/103810330