面试中的笔试编程题目(一)

本文介绍了一种解决购物预算问题的算法,通过排序和遍历物品价格,实现预算内购买尽可能多品种商品的目标。示例代码展示了如何使用Java实现该算法。

最近的投简历过程中,有一家公司先发了笔试题目,在写的过程也有了少许收获,现在复盘一遍,加强学习。

一. 

小明的女朋友最喜欢在网上买买买了,可是钱包里钞票有限,不能想买啥就买啥。面对琳琅满目的物品,她想买尽可能多的种类,每种只买一件,同时总价格还不能超过预算上限。于是她请小明写程序帮她找出应该买哪些物品,并算出这些物品的总价格。

输入规范:
每个输入包含两行。第一行是预算上限。第二行是用空格分隔的一组数字,代表每种物品的价格。所有数字都为正整数并且不会超过10000。

输出规范:
对每个输入,输出应买物品的总价格。

输入示例1:
100
50 50
输出示例1:
100

输入示例2:
188
50 42 9 15 105 63 14 30
输出示例2:
160

题目分析:

首先要理解题目,首先给一个最大金额(正整数,小于等于1000),然后是输入各种物品价格,然后输出最多能买多少价格的东西,那么首先一个大体思路,先要给各种物品排序,可以冒泡排序,也可以用集成的sort方法,既Collections.sort(),然后再循环物品,判断是否大于最大金额,大于的时候,break,即可。


代码:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class test {

	public static void main(String[] args) {
	Scanner sc1 = new Scanner(System.in); 
        Scanner sc2 = new Scanner(System.in); 
        String moneyMax = sc1.nextLine();
        String money = sc2.nextLine();
		
        List<Integer> list = new ArrayList();
        String moneys[] = money.split("\\s+");
        for(String m :moneys){
        	int ms = 0;
        	if(m!=null)
        		ms = Integer.parseInt(m);
        	if(ms>0&&ms<=1000)
        		list.add(ms);
        }
        Collections.sort(list);
	int moneyMaxs = Integer.parseInt(moneyMax);
        int sum =0;
        
        for(Integer x: list){
        	if(sum+x>moneyMaxs)
        		break;
        	else
        		sum+=x;
        }
      System.out.println(sum);
	}

}

有几个知识点:

1.了解collections.sort()的方法,这是一个比较便捷的排序方法,可以直接使用,当然也可以自写冒泡排序,那为什么要排序呢,首先,题目中有提到要买尽量多的东西,故要从小加上来,故排序。

2." " 和"\\s+ "的区别,第一种只能识别一个空格,后一种可以识别多个空格,这也是区别,其实这里用" "即可。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值