- 判断是否是回文数:
#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;
}