早教吧作业答案频道 -->其他-->
用java帮忙改一下这道题目3.一辆卡车违反交通规则,撞人后逃跑。现场有三人目击事件,但都没记住车号,只记下车号的一些特征。甲说:牌照的前两位数字是相同的;乙说:牌照的后两
题目详情
用java帮忙改一下这道题目
3.一辆卡车违反交通规则,撞人后逃跑。现场有三人目击事件,但都没记住车号,
只记下车号的一些特征。甲说:牌照的前两位数字是相同的;
乙说:牌照的后两位数字是相同的,但与前两位不同;
丙是数学家,他说:四位的车号刚好是一个整数的平方。请根据以上线索编程求出车号。(30分)
public class chehao {
public static int a;
public static int b;
public static int c;
public static int d;
public static int e;
public static int s;
public static void main(String args[])
{
a=(int)(1+Math.random()*9);
b=(int)(1+Math.random()*9);
c=(int)(1+Math.random()*9);
d=(int)(1+Math.random()*9);
s=a*1000+b*100+c*10+d*1;
if(a==b&&c==d&&s==e*e&&c!=b)
{
System.out.println("车牌号"+s);
}
}
}
3.一辆卡车违反交通规则,撞人后逃跑。现场有三人目击事件,但都没记住车号,
只记下车号的一些特征。甲说:牌照的前两位数字是相同的;
乙说:牌照的后两位数字是相同的,但与前两位不同;
丙是数学家,他说:四位的车号刚好是一个整数的平方。请根据以上线索编程求出车号。(30分)
public class chehao {
public static int a;
public static int b;
public static int c;
public static int d;
public static int e;
public static int s;
public static void main(String args[])
{
a=(int)(1+Math.random()*9);
b=(int)(1+Math.random()*9);
c=(int)(1+Math.random()*9);
d=(int)(1+Math.random()*9);
s=a*1000+b*100+c*10+d*1;
if(a==b&&c==d&&s==e*e&&c!=b)
{
System.out.println("车牌号"+s);
}
}
}
▼优质解答
答案和解析
楼主,你好,这段程序的思想是通过随机生成车牌的4位数,然后对三个条件进行过滤。理论上能够实现。但是这样的效率非常低下。
而且程序中的变量e定义以后没有赋值,int型的变量默认是0。你的if中e*e就恒等于0。因此上面这段程序找不到符合要求的车牌号码。
因此,我们换一种思路。从甲乙丙三人的描述中,车牌是一个4位号码(有可能以0开头)。因此我们只要遍历0000到9999这一万个数字,分离出数字中的各个位数,然后进行判断即可得出。但是这要循环一万次,其实我们还可以循环更少的次数。
从甲和乙的口中得知,我们的车号只可能是AABB的形式。也就是1122,3344等的形式。因此,我们只要设置一个双层循环,每层循环都循环10次,就可以生成所有AABB形式的4位数。请详细看下面的代码:
public static void main(String[] args) {
//外层循环用于生成千位和百位
for(int i = 0 ; i <= 9 ; i ++)
{
//内层循环用于生成十位和个位
for(int j = 0 ; j <= 9 ; j ++)
{
//根据乙说的,千位和个位的数字如果相同,则continue,过滤掉。
if(i == j )
{
continue;
}
//至此我们生成符合甲,乙所说条件的数字为i+i+j+j,注意中间注意添加空串分割,否则计算机会把i和j当成数字求和。这样加起来是一个字符串,我们还要把它转换成整型,通过 Integer.parseInt 方法;
int s = Integer.parseInt(i+""+i+""+j+""+j);
//如果满足丙说的条件Math.sqrt为开平方方法。
if((int)Math.sqrt(s) == Math.sqrt(s))
{
//打印符合要求的车牌号。
System.out.println("车牌号为:"+s);
}
}
}
}
那么这段代码的最终执行结果为:
车牌号为:7744
而且程序中的变量e定义以后没有赋值,int型的变量默认是0。你的if中e*e就恒等于0。因此上面这段程序找不到符合要求的车牌号码。
因此,我们换一种思路。从甲乙丙三人的描述中,车牌是一个4位号码(有可能以0开头)。因此我们只要遍历0000到9999这一万个数字,分离出数字中的各个位数,然后进行判断即可得出。但是这要循环一万次,其实我们还可以循环更少的次数。
从甲和乙的口中得知,我们的车号只可能是AABB的形式。也就是1122,3344等的形式。因此,我们只要设置一个双层循环,每层循环都循环10次,就可以生成所有AABB形式的4位数。请详细看下面的代码:
public static void main(String[] args) {
//外层循环用于生成千位和百位
for(int i = 0 ; i <= 9 ; i ++)
{
//内层循环用于生成十位和个位
for(int j = 0 ; j <= 9 ; j ++)
{
//根据乙说的,千位和个位的数字如果相同,则continue,过滤掉。
if(i == j )
{
continue;
}
//至此我们生成符合甲,乙所说条件的数字为i+i+j+j,注意中间注意添加空串分割,否则计算机会把i和j当成数字求和。这样加起来是一个字符串,我们还要把它转换成整型,通过 Integer.parseInt 方法;
int s = Integer.parseInt(i+""+i+""+j+""+j);
//如果满足丙说的条件Math.sqrt为开平方方法。
if((int)Math.sqrt(s) == Math.sqrt(s))
{
//打印符合要求的车牌号。
System.out.println("车牌号为:"+s);
}
}
}
}
那么这段代码的最终执行结果为:
车牌号为:7744
看了用java帮忙改一下这道题目3...的网友还看了以下:
以下是我们常见的交通指示牌,他一般用铝合金材料制成,在一张长方形铝合金片中截取两张指示牌,每张指示 2020-05-17 …
需要一组主题照片!一共10张照片通过10张照片表达一个连贯的故事性主题,不要有注解.不是那种看到好 2020-05-17 …
一个王国有九个城市,分别是:A,B,C,D,E,F,G,H,I.政府按照下面的方式来发车牌第一批车 2020-06-11 …
很有意思的题~两个交通标志牌,(一个写着西大桥8KM,另一个圆形的标志牌写着40),汽车从标志牌到 2020-07-13 …
1、声声慢是词牌名,作者李清照。2、声声慢是词牌名,作者是李清照。第一句是对的第二句是错的,为什么 2020-07-26 …
请按照要求写一份广告词平时,总有同学向学校池塘中的鱼儿扔石头,或各种杂物,污染池水.于是,学校根据具 2020-11-05 …
请问一道概率题如果每个牌照包括3个不同的非零数字加上3个不同的字母,现随机抽取一个牌照,求第一个数字 2020-11-18 …
一座平直的跨海大桥全长1.6km,桥头立着图所示的两个标志牌.一辆货运火车长200m,匀速行驶恰好达 2020-12-15 …
随着北京公交票制票价调整,公交集团更换了新版公交站牌,乘客在乘车时可以通过新版公交站牌计算乘车费用. 2021-01-07 …
数据库请高手帮忙1.某汽车运输公司数据库中有一个记录司机运输里程的关系模式:R(司机编号,汽车牌照, 2021-01-08 …