对不起这样一个基本问题的人。但我是编程的先驱。不是电脑的人。所以请帮助我。
在此代码中,当我提供输入1000000000
,1000000000
,999999999
时,答案应为4.但我的答案是1.我希望if
语句可以执行,但它是不在这里执行。
如果你把m * n作为一个房间而且" a"作为正方形瓷砖的一面。然后我想要最低数量。填满房间地板所需的瓷砖。瓷砖可能会覆盖更多的区域,但不应该留空。这是我的目标。它使用像6,6,4或15,20,13等输入。
现在是工作人员。我已经在下面发布了正确的代码以及那些小的更改。
import java.util.Scanner;
public class TheatreSquare {
private static Scanner input;
public static void main(String[] args) {
input = new Scanner(System.in);
float m=input.nextFloat();
float n=input.nextFloat();
float a=input.nextFloat();
long i=(int)(m/a);
long j=(int)(n/a);
if((a*a*i*j)<m*n){
if(a*i<m){
//to check weather it is entering if()
System.out.println("true");
i+=1;
}
if(a*j<n){
System.out.println("false");
//to check weather it is entering if()
j+=1;
}
}
System.out.println((double)(i*j));
}
}
答案 0 :(得分:3)
当你将它们相乘时,你的花车会溢出。将m
,n
和a
定义为double
将解决此问题:
double m = input.nextDouble();
double n = input.nextDouble();
double a = input.nextDouble();
答案 1 :(得分:2)
int转换失去精度。
在这种情况下,get_member_var_a
等于a*a*i*j
因此if循环不会执行。此外,m*n
等于a*i
,m
等于n。
因此我isi和j是1,所以a*j
是1。
如果它也相同,你需要允许它去。 替换
i*j
<强>与强>
if((a*a*i*j)<m*n){
if(a*i<m){
//to check weather it is entering if()
System.out.println("true");
i+=1;
}
if(a*j<n){
System.out.println("false");
//to check weather it is entering if()
j+=1;
}
}
答案 2 :(得分:2)
thankyou @Mureinik,@ Uma Lakshmi Kanth,@ Diego Martinoia帮助解决了这个问题。您的所有答案都有助于解决我的问题。这个现在正在运作。正如@Mureinik所说,我的花车溢出(虽然我不知道其含义)。我使用了Double而不是float,就是这样。它的工作。 : - )
dmesg
答案 3 :(得分:1)
您的行为的原因是您正在以浮动数字读取数字。浮点数的精度有限,因此m n和a的值相同(在运行时)。阅读它们(并摆脱所有小数的东西)应该有所帮助。但是,正如评论中所提到的,我们不知道你想要实现什么!
---由于新信息而编辑---
你必须覆盖面积为n平方米的面积。你有一个计算单位为1瓦,即一平方米(均假设为十进制)。
假设您可以用足够精确的方式切割瓷砖,结果将是:
Math.ceiling((m*n) / (a*a));
即,您的区域是您的瓷砖的精确倍数(并且您可以始终将它们切割成矩形以匹配房间的形状),或者您将有一些“备用”空间来填充,因此您将需要多一块瓷砖,其中一部分用于覆盖剩余空间,其中一部分将丢弃。