这篇文章讲述的是算法初级部分的求车速问题的java实现,参考的书籍为清华大学出版社出版,贾蓓等编著的《c语言趣味编程1000例》,如有错误或者不当之处,还望各位大神批评指正。
问题描述
一辆车以固定速度行驶,司机在上午10点看到里程表上的读数是一个对称数(即这个数从左向右和从右往左的读数是完全一样的),为95859,两个小时后里程表上出现了一个新的对称数,该数仍为5位数。问该车的速度为多少?新的对称数为多少?
算法分析
该算法为对称数的判定类问题,有多种解决方式,将每一位数都存在数组中,然后再前后比较。
代码实现
package mathematics;
public class Q6_CarSpeed {
/**
* 问题描述:一辆车以固定速度行驶,司机在上午10点看到里程表上的读数是一个对称数(即这个数从左向右和从右往左的读数是完全一样的)
* ,为95859,两个小时后里程表上出现了一个新的对称数,该数仍为5位数。问该车的速度为多少?新的对称数为多少?
*
* 算法分析:该算法为对称数的判定类问题,有多种解决方式,将每一位数都存在数组中,然后再前后比较。
*/
public static void main(String[] args) {
int mileage = 95859 ; //初始车速
boolean flag = true ; //while循环条件
int mileage2 = mileage ;
while(flag){
mileage2++ ;
int milearr[] = forArray(mileage2) ; //将数字按位转换为数组
if(milearr[0]==milearr[4] && milearr[1]==milearr[3]){
System.out.println("车速为:"+(mileage2-mileage)/2+"km/h 对称数为:"+mileage2);
flag = false ;
}
}
}
/*将数字按位保存到数组中*/
private static int[] forArray(int mileage) {
int milearr[] = new int[5] ;
for(int i=0 ,k=100000 ; k>=10 ;i++){
milearr[i] = (mileage%k)/(k/10) ;
k/=10 ;
}
return milearr;
}
}
样例输出
车速为:50km/h 对称数为:95959