写了一个小程序,功能大概是:输入两行参数,例如
188
50 42 9 15 105 63 14 30
将下面的50 42 9 15 105 63 14 30按从小到大排序后,从下标为0的元素开始相加,直到相加的和最接近于188
返回和。
贴上源代码~~
public class InterviewQuestion {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Integer str = Integer.valueOf(sc.nextLine());//第一行参数
String secondStr = sc.nextLine();//第二行参数
String[] split = secondStr.split(" ");
int[] prices = new int[split.length];//将第二次输入的参数存在prices数组中
for (int i=0;i<split.length;i++) {
Integer temp = Integer.valueOf(split[i]);
prices[i] = temp;
}
//将数组按从小到大排序
Arrays.sort(prices);
int sum = 0;
for(int i=0;i<prices.length;i++) {
if(sum >= str) {
sum = sum - prices[i-1];
break;
}else{
sum = sum + prices[i];
}
}
System.out.println(sum);
sc.close();
}
本来没什么事情,但是诡异的是,随手输入了一组数据
18
5 5 5 5
按道理说,应该返回15才对,但是返回了20,代码我觉得没什么问题,然后debug了一下
诡异的事情发生了
for(int i=0;i<prices.length;i++) prices.length为4
i=3 的情况下 居然没有进入for循环进行判断?这是怎么回事,怎么也想不出来问题,求大神帮忙看看。。。
相关分类