一辆以固定速度行驶的汽车,司机在上午10点看到里程表上的读数是一个对称数(即这个数从左向右读和从右向左读是完全一样的),为95859。两小时后里程表上出现了一个新的对称数。问该车的速度是多少?新的对称数是多少?
*问题分析与算法设计
根据题意,设所求对称数为i,其初值为95589,对其依次递增取值,将i值的每一位分解后与其对称位置上的数进行比较,若每个对称位置上的数皆相等,则可判定i即为所求的对称数。
*程序说明与注释
#include<stdio.h>
int main()
{
int t,a[5]; /*数组a存放分解的数字位*/
long int k,i;
for(i=95860;;i++) /*以95860为初值,循环试探*/
{
for(t=0,k=100000;k>=10;t++) /*从高到低分解所取i值的每位数*/
{ /* 字,依次存放于a[0]~a[5]中*/
a[t]=(i%k)/(k/10);
k/=10;
}
if((a[0]==a[4])&&(a[1]==a[3]))
{
printf("The new symmetrical number kelometers is:%d%d%d%d%d\n",
a[0],a[1],a[2],a[3],a[4]);
printf("The velocity of the car is: %.2f\n",(i-95859)/2.0);
break;
}
}
}
*运行结果
The new symmetrical number kelometers is:95959.
The velocity of the car is:50.00
*思考题
将一个数的数码倒过来所得到的新数叫原数的反序数。如果一个数等于它的反序数,则称它为对称数。求不超过1993的最大的二进制的对称数。