这又是一个数字问题的代码化,首先解释里面的几个概念并用数学的方法将这个三位数推导出来. 数码:数的基本单元,也就是数字.例如123和321二者分别含有三个数码,且数码顺序相反。 进制:可看作是特殊进制转换为默认进制(10进制)时的底数。 数学推导: 由上述数学推导过程可知,函数体内的判断条件即是七进制和九进制化为十进制时二者相等,而这需要在所有符合七进制(七和九取并集)的三位数内进行筛选,而七进制遇七进一的特点就是突破口.
for(i
=1;i
<7;i
++)
for(j
=0;j
<7;j
++)
for(k
=1;k
<7;k
++)
if(i
*9*9+j
*9+k
==i
+j
*7+k
*7*7)
另外注意三位数的组成情况,因为二者数码顺序无论是正还是反都是正常的三位数,所以两端都不可以取0. 完整代码如下:
#include<stdio.h>
int main()
{
int i
,j
,k
;
for(i
=1;i
<7;i
++)
for(j
=0;j
<7;j
++)
for(k
=1;k
<7;k
++)
if(i
+j
*7+k
*7*7==i
*9*9+j
*9+k
)
{
printf("这个奇异的三位数是(括号内是进制):\n");
printf("%d%d%d(7)=%d%d%d(9)=%d(10)\n",k
,j
,i
,i
,j
,k
,i
*9*9+j
*9+k
);
}
}
这个题对数学知识的考察要大于C语言基础内容的考察,只要进制之间的关系搞懂,那么代码化就迎刃而解了. 对我的博客或其他方面有任何见解或问题的话都可以私信我 或者联系本人QQ:3128909688 微信:DreamHerome 欢迎致电