问题
Yraglac最近决定尝试使用Soylent,这是一种膳食替代饮品,旨在满足普通成年人的所有营养需求。 Soylent不仅味道好,而且价格低廉,这对Yraglac来说非常重要,因为他目前的预算有限。每瓶提供400卡路里,因此建议每个人每天应消耗5瓶,总热量为2000。然而,Yraglac想知道如果他的每日卡路里需求与普通成年人不同,他应该消耗多少瓶。他只能消耗整数瓶子,至少需要消耗他每日的卡路里需求。
Src: https://open.kattis.com/problems/soylent
输入
第一行包含一个整数T≤1000,给出了测试用例的数量。每个测试用例由一行整数N(0≤N≤100000)组成,Yraglac每天需要的卡路里数。
输出
对于每个测试用例,输出一行,其中包含Yraglac当天需要消耗的瓶数。
示例输入
2
2000
1600
示例输出
5
4
我的尝试
public Soylent() {
Scanner scan = new Scanner(System.in);
int iterations = scan.nextInt();
for (int i = 0; i < iterations; i++) {
int calories = scan.nextInt();
System.out.println((int) (Math.ceil(calories / 400)));
}
}
我做错了什么?
答案 0 :(得分:2)
这是错误的,因为您在int
电话中使用Math.ceil
。
例如,如果您运行此代码:
public class Main {
public static void main(String[] args) {
System.out.println(Math.ceil(2500/400));
System.out.println(Math.ceil(2500/400.0));
}
}
您将获得此输出:
6.0
7.0
在第二次Math.ceil
通话中,您实际上使用双打,因此2500/400的小数不会丢失。
更清楚地说明:
int result1 = 2500 / 400; //6.0
int ceiling1 = Math.ceil(result1); //6
double result2 = 2500 / 400; //6.0
int ceiling2 = Math.ceil(result2); //6
double result3 = 2500 / 400.0; //6,25
int ceiling3 = Math.ceil(result3); //7
double result4 = (double) 2500 / 400; //6.25
int ceiling4 = Math.ceil(result4); //7
因此,要修复代码,请将calories
设为加倍,除以400.0
或将calories / 400
的结果转换为double
。
答案 1 :(得分:0)
作为Michael_T。说,卡路里是一个双倍而不是整数。谢谢!
public class Soylent {
public Soylent() {
Scanner scan = new Scanner(System.in);
int iterations = scan.nextInt();
for (int i = 0; i < iterations; i++) {
double calories = scan.nextDouble();
System.out.println((int) (Math.ceil(calories / 400)));
}
}