早教吧作业答案频道 -->其他-->
用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...的网友还看了以下:
甲每秒跑4米,乙每秒跑6米,丙每秒跑3米,三人沿长240米的环形跑道同时从同一地点朝相同方向跑步至 2020-06-03 …
甲乙丙三人绕圆形跑道同向跑步.甲跑一圈要1分,乙跑一圈要一分半钟,丙跑一圈要1分15秒,三个人同时 2020-06-10 …
甲乙两人在一环形跑道上练习长跑,在同一起点同时相背而行,甲跑220米后与乙相遇,两人继续跑,甲跑到 2020-06-19 …
在400米的环形跑道上,男生每分钟跑340米,女生每分钟跑260米,若同向而跑且同时同地出发,则需 2020-07-09 …
在400米的环形跑道上,男生每分钟跑340m,女生每分钟跑260m,若同向而跑且同时通敌出发,则需 2020-07-09 …
有男女运动员个1名,在环形跑道上练习长跑.有男女运动员各一名在一个环形跑道上练长跑,跑步时速度都不 2020-07-11 …
小斌和小明每天坚持在学校400米的环形跑到运动,小斌每秒跑4米,小明每秒跑6秒(1)若他们都站同一 2020-07-22 …
对下列病句修改错误的一项是A.清晨,参加象征性长跑的同学们在公路上飞快的奔驰着。/“奔驰”——“奔跑 2020-12-05 …
甲乙两人绕环形跑道同时背向而跑,甲每秒跑6.4米,乙每秒跑7.6米.当他们相遇后,乙继续向前跑,再跑 2020-12-25 …
题目中说的两矩阵特征值相同,是只说有一样的特征值还是说不但一样,...题目中说的两矩阵特征值相同,是 2020-12-31 …