问题十九:一个四位数的9倍刚好是其反序数,求该四位数
问题二十:初始值为95859,为对称数,即前后反序数字不变,增加某个数字的二倍后,得到一个新的对称数,求新的对称数
问题二十一:两个平方三位数abc和xyz,所构成的ax,by,cz是三个平方两位数,求符合情况的所有两个三位数
问题二十二:求1000以内的所有阿姆斯特朗数,数的特征是所有位上的数字的立方的和等于这个数本身,且为正整数
/*
题目十九:一个四位数的9倍刚好是其反序数,求该四位数
分析:比之前的题目简单,这里给出代码,这个四位数不会超过 1200,
否则九倍后就超出了范围
题目二十: 初始值为95859,为对称数,即前后反序数字不变,增加某个数字的二倍后,得到一个新的对称数,求新的对称数
分析:依旧采用试探法,可以将“某个数的二倍”视为一个数 ,即为求下一个反序数
下一个数不会超过100000
题目二十一:两个平方三位数abc和xyz,所构成的ax,by,cz是三个平方两位数,求符合情况的所有两个三位数
分析: 可开平方的两位数00,04,09,16,25,36,49,81共八种 ,可由上两题的已知函数求解
题目二十二: 求1000以内的所有阿姆斯特朗数,数的特征是所有位上的数字的立方的和等于这个数本身,且为正整数
分析: 例如407=4*4*4+0*0*0+7*7*7,则407就是一个阿姆斯特朗数,根据上面的已知函数可得
*/
#include<iostream>
using namespace std;
int number(int num,int n){//返回第n位的数字
int i = n;
int fin;
for(;i>1;i--){
num /= 10;
}
fin = num%10;
//cout<<fin<<endl;
return fin;
}
int test_up(int num){
int mid = num;
int i;
for(i = 1;i<=5;i++){
if(number(mid,i)!=number(mid,6-i))break;
}
if(i == 6){
return 1;
}else{
return 0;
}
}
int test_bit(int num){//测试是否为平方数
int i;
if(num/100>0){
for(i = 10;i<32 && i*i<=num;i++){
if(i*i == num){
return 1;
}
}
}else{
for(i = 0;i<=9 && i*i<=num;i++){
if(i*i == num){
return 1;
}
}
}
return 0;
}
int main(){
//题目十九
/*
int i;
int mid,mid_ninth;
for(i = 1000;i<=1200;i++){
mid = i;
mid_ninth = i*9;
if(number(mid,1)==number(mid_ninth,4) &&
number(mid,2)==number(mid_ninth,3) &&
number(mid,3)==number(mid_ninth,2) &&
number(mid,4)==number(mid_ninth,1))cout<<i<<endl;
}*/
//题目二十
/*
int i;
for(i=95860;i<100000;i++){
if(test_up(i)){
cout<<i<<endl;
break;
}
}
*/
//题目二十一
/* int i;
while(1){
cin>>i;
cout<<test_bit(i);
}*/
/*
int i,j;
for(i=100;i<=999;i++){
if(test_bit(i) == 0)continue;
for(j=100;j<=999;j++){
if(test_bit(j) == 0)continue;
if(test_bit(number(i,3)*10+number(j,3)) &&
test_bit(number(i,2)*10+number(j,2)) &&
test_bit(number(i,1)*10+number(j,1))){
cout<<i<<" and "<<j<<endl;
}
}
}
*/
//题目二十二
int i;
for(i=1;i<=1000;i++){
if(i/10 == 0){
if(i == i*i*i)cout<<i<<endl;
}else{
if(i/100 == 0){
if(i == number(i,2)*number(i,2)*number(i,2)+
number(i,1)*number(i,1)*number(i,1)){
cout<<i<<endl;
}
}else{
if(i == number(i,3)*number(i,3)*number(i,3)+
number(i,2)*number(i,2)*number(i,2)+
number(i,1)*number(i,1)*number(i,1)){
cout<<i<<endl;
}
}
}
}
return 0;
}
这其中有不合适或者不正确的地方欢迎指正,我的QQ号码:2867221444(乔金明),谢谢,也可以相互交流下,备注信息随意,只要能看得出是开发者或者学习者即可。