求车速
问题描述:
一辆以固定速度行驶的汽车,司机在上午10点看到里程表上的读数是一个对称数(即这个数从左向右读和从右向左读是完全一样的),为95859。两小时后里程表上出现了一个新的对称数,该数仍为五位数。问该车的速度是多少?新的对称数是多少?
问题分析:
对称数是95859,两小时后出现新的,这个数肯定比95859要打,假设这个数为i,i>95859,然后我们把i这个五位数拆分,把第一位和第五位比较,第二位与第四位比较,如果相同,就是我们要找的数。
程序框架:
1.肯定要用到for循环,i从95859开始增加,一次次试i的值,也就是这样
for (int i = 95860;; i++)
2.把i分解,然后存入数组中,创建一个数组a[5],a[0]放万位上的数,a[1]放千位上的数............
for (t = 0, k = 100000; k >= 10; t++) { a[t] = (i % k) / (k / 10); k /= 10;//k依次减小 }
3.然后就该判断了,判断第一位和第五位,第二位和第四位
if (a[0] == a[4] && a[1] == a[3])
4.判断完,我们输出这个数
for (int s = 0; s < 5; s++) { cout << a[s] << " "; }//我这个后面有空格,输出的是五个数字,连起来就是对称数
5.完整代码
#include<iostream> using namespace std; int main() { int a[5]; int t; long int k; for (int i = 95860;; i++) { for (t = 0, k = 100000; k >= 10; t++) { a[t] = (i % k) / (k / 10);//把每个位置上的数存入数组中 k /= 10;//k变为原来的十分之一,可以依次求出万位,千位,百位,十位,个位的数字 } if (a[0] == a[4] && a[1] == a[3])//判断是不是对称数 { for (int s = 0; s < 5; s++)//for循环,输出结果 { cout << a[s] << " "; } cout << ((i - 95859) / 2) << endl;//求车速 break;//找到结果后跳出循环 } } return 0; }