初级系列16.求车速问题

求车速

问题描述

一辆以固定速度行驶的汽车,司机在上午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\n",
                    a[0],a[1], a[2], a[3],a[4]);
            printf("该车的速度为: %.2f\n", (i-95859) / 2.0);
            break;  /* !< 跳出循环*/
        }
    }
}

/* !<output */
    里程表上出现的新的对称数为 95959
    该车的速度为: 50.00

    Process returned 0 (0x0)   execution time : 0.004 s
    Press any key to continue.




posted @ 2019-09-08 10:31  电院院长  阅读(369)  评论(0编辑  收藏  举报