算法初级_Question4_抓交通肇事犯(java实现)

这篇文章讲述的是算法初级部分的抓交通肇事犯问题的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

猜你喜欢

转载自blog.csdn.net/u013634252/article/details/80813647