独立的牛牛编程题出现“请检查是否存在数组越界等非法访问情况 通过率50%”
链接:https://www.nowcoder.com/questionTerminal/1bc7b0a9a717462ca8386cebb842548f
来源:牛客网
小牛牛为了向他的父母表现他已经长大独立了,他决定搬出去自己居住一段时间。
一个人生活增加了许多花费: **牛牛每天必须吃一个水果并且需要每天支付x元的房屋租金。
当前牛牛手中已经有f个水果和d元钱,牛牛也能去商店购买一些水果,商店每个水果售卖p元。
牛牛为了表现他独立生活的能力,希望能独立生活的时间越长越好,牛牛希望你来帮他计算一下他最多能独立生活多少天。**
输入描述:
输入包括一行,四个整数x, f, d, p(1 <= x,f,d,p <= 2 * 10^9),以空格分割
输出描述:
输出一个整数, 表示牛牛最多能独立生活多少天。
import java.io.*;
import java.util.Scanner;
public class Main{
public static int day = 0;
public static void main(String[] args) throws IOException{
Scanner in = new Scanner(System.in);
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String s = null;
if((s = bf.readLine())!=null){
String[] value = s.split("\\s+");
if(value.length==4) {
MaxDay(Integer.parseInt(value[0]),Integer.parseInt(value[1]),Integer.parseInt(value[2]),Integer.parseInt(value[3]));
}
System.out.println(day);
}
}
public static void MaxDay(int x, int f, int d, int p){
if(d<x || f<1&&d<p+x){
return;
}else if(d>=x&&f>=1){
day++;
MaxDay(x, f-1, d-x, p);
}else if(d>=x+p&&f<1){
day++;
MaxDay(x, f, d-x-p, p);
}
}
}
这个究竟是什么原因呢?有大佬帮我解释一下么?标准答案没问题,下面是标准答案:
Scanner in = new Scanner(System.in);
while(in.hasNext()){
int x = in.nextInt();
int f = in.nextInt();
int d = in.nextInt();
int p = in.nextInt();
//先满足房租再考虑水果,而且付得起的房租数就等于最大的天数
int days = d/x;
if(days<=f) {
System.out.println(days);
}else{
d -= x*f;//减去现有水果天数剩余的钱
days= f + d/(x+p);//现有水果天+钱除以每日(房租+水果)
System.out.println(days);
}
}