求车速
问题描述
一辆以固定速度行驶的汽车,司机在上午10点看到里程表上的读数是一个对称数(即这个数从左向右读和从右向左读是完全一样的),为95859,两小时后里程表上出现了一个新的对称数,该数为五位数,问该车的速度是多少?新的对称数是多少?
问题分析
根据题意,司机在上午10点看到里程表上的读数是一个对称数95859,两小时后里程表上出现的新的对称数 必然大于95859,因此,假设所求对称数为i,并设为其初值为95860,即从95860开始检测,使i的取值依次 递增,对于i的每一次取值都将其进行分解,然后将对称位置上的数字进行比较,如果每个处于对称位置上的数都是相等的,则可以判断出当前的i中所存放的五位数即为里程表上新出现的对称数
算法设计
1> i需要从95860开始试探,因此显然需要使用循环结构,循环体中完成分解五位数并保存,再检测是否为对称数 的功能
2> 问题中需要对一个五位数进行分解并保存,因此可以使用数组来保存分解后生成的五个数字
#include <stdio.h>
int main(void)
{
int t, a[5]; /* !<数组a存放分解后的五个数字*/
long int k, i;
/* !<以95860为初值,循环试探*/
for (i = 95860; ; i++) {
/* !<从高到低分解当前i中保存的五位数,并顺次存放在数组元素a[0]-a[4]中*/
for (t = 0, k = 100000; k >= 10; t++) {
a[t] = (i % k) / (k / 10); /* !<保存分解后的数字*/
k /= 10;
}
if ((a[0] == a[4]) && (a[1] == a[3])) {
printf("里程表上出现的新的对称数为 %d%d%d%d%d
",
a[0],a[1], a[2], a[3],a[4]);
printf("该车的速度为: %.2f
", (i-95859) / 2.0);
break; /* !< 跳出循环*/
}
}
}
/* !<output */
里程表上出现的新的对称数为 95959
该车的速度为: 50.00
Process returned 0 (0x0) execution time : 0.004 s
Press any key to continue.