这篇文章讲述的是算法初级部分的抓交通肇事犯问题的java实现,参考的书籍为清华大学出版社出版,贾蓓等编著的《c语言趣味编程1000例》,如有错误或者不当之处,还望各位大神批评指正。
问题描述
一辆卡车违反了交通规则,撞人后逃跑。现有三名目击证人,但他们都没有记住车牌号,只是记住了车号的一些特征:甲说,牌照的前两位数字是相同的,乙说,牌照的后两位数字相同,但与前两位不同,丙说,四位的车号刚好是一个整数的平方。请根据以上的信息求出肇事车牌号。
算法分析
车的号码为四位数,假设A1,A2,A3,A4分别代表车牌号的位数,A1,A2,A3,A4满足关系:
1. A1 = A2
2. A3 = A4
3. A1 != A3
4. A1*1000 + A2*100 + A3*10 + A4 == x*x
A1,A2,A3,A4 的取值范围为0-9,故使用两层循环确定A1,A3的值,然后在判定是否满足条件,x的取值范围为31-99(若小于31或大于99取平方不为4位数,不符合条件)。
代码实现
public class Q4_CarNumber {
/***
* 问题描述:一辆卡车违反了交通规则,撞人后逃跑。现有三名目击证人,但他们都没有记住车牌号,
* 只是记住了车号的一些特征:甲说,牌照的前两位数字是相同的,乙说,牌照的后两位
* 数字相同,但与前两位不同,丙说,四位的车号刚好是一个整数的平方。请根据以上的
* 信息求出肇事车牌号
*
* 算法分析:车的号码为四位数,假设A1,A2,A3,A4分别代表车牌号的位数,A1,A2,A3,A4满足关系:
* 1. A1 = A2
* 2. A3 = A4
* 3. A1 != A3
* 4. A1*1000 + A2*100 + A3*10 + A4 == x*x
* A1,A2,A3,A4 的取值范围为0-9,故使用两层循环确定A1,A3的值,然后在判定是否满足
* 条件,x的取值范围为31-99(若小于31或大于99取平方不为4位数,不符合条件)
*/
public static void main(String[] args) {
int A1 , A2 , A3 , A4 ,x ;
for(A1=0 ; A1<=9 ; A1++) //A1的值
for(A3=0 ; A3<9 ; A3++){ //A3的值
if(A1 != A3){ //判定A1,A3是否相等
A2 = A1 ;
A4 = A3 ;
for( x=31 ; x<99 ; x++){ //判定是否为x的平方
if(A1*1000 + A2*100 + A3*10 + A4 == x*x){
System.out.println("x的值为:"+x+" 肇事者的车牌号为:"+A1+""+A2+""+A3+""+A4);
break;
}
}
}
}
}
}
样例输出
x的值为:88 肇事者的车牌号为:7744