zoukankan      html  css  js  c++  java
  • 美团笔试

    题目描述

    请设计一个算法能够完成两个用字符串存储的整数进行相加操作,对非法的输入则返回error

    输入描述:

    输入为一行,包含两个字符串,字符串的长度在[1,100]。

    输出描述:

    输出为一行。合法情况输出相加结果,非法情况输出error

    输入

    123 123
    abd 123
    

    输出

    246
    Error
    import java.math.BigInteger;
    import java.util.HashSet;
    import java.util.Hashtable;
    import java.util.Scanner;
    public class Main {
          public static void main(String[] args) {
            Scanner scanner=new Scanner(System.in);
            
            try {
                BigInteger sBigInteger=scanner.nextBigInteger();
                BigInteger sBigInteger2=scanner.nextBigInteger();
                System.out.println(sBigInteger.add(sBigInteger2));
            } catch (Exception e) {
                System.out.println("error");
            }
            }
    }

    描述

    最近天气炎热,小Ho天天宅在家里叫外卖。他常吃的一家餐馆一共有N道菜品,价格分别是A1, A2, ... AN元。并且如果消费总计满X元,还能享受优惠。小Ho是一个不薅羊毛不舒服斯基的人,他希望选择若干道不同的菜品,使得总价在不低于X元的同时尽量低。

    你能算出这一餐小Ho最少消费多少元吗?

    输入

    第一行包含两个整数N和X,(1 <= N <= 20, 1 <= X <= 100)

    第二行包含N个整数A1, A2, ..., AN。(1 <= Ai <= 100)

    输出

    输出最少的消费。如果小Ho把N道菜都买了还不能达到X元的优惠标准,输出-1。

    先获取总额sum,得到sum与x的差值,在这个差值下看看由菜品价格组成的价格最大就可以

    public class Main {
     
        public static void main(String[] args) throws Exception {
            Scanner in=new Scanner(System.in);
            while(in.hasNext()){
     
                int n = in.nextInt(),x = in.nextInt(), sum = 0;
                int price[] =new int[n+1];
                price[0]=0;
                for(int i=1;i<n+1;i++){
                    price[i] = in.nextInt();
                    sum += price[i];
                }
                if(sum < x){
                    System.out.println("-1");
                    continue;
                }
                int m = sum - x;//获得当前的最大的菜的
                int[][] dp = new int[n+1][m+1];
                for (int i = 1; i < dp.length; i++) {
                    for (int j = 1; j < dp[i].length; j++) {                
                            if (j>=price[i]) {
                                dp[i][j]=Math.max(dp[i-1][j-price[i]]+price[i],dp[i-1][j]);//加入当前菜品所能到的剩下钱的最大值 而不是相加
                            }
                            else {
                                dp[i][j]=dp[i-1][j];
                            }
                    }
                }
                System.out.println(sum - dp[n][m]);      
            }
        }
  • 相关阅读:
    WPS客户端更新日志留着备用
    C#设置电脑时间帮助类
    分布式数据库拆表拆库的常用策略
    程序员如何对待自己的工作
    java对接申通下单接口示例代码
    电子面单开发流程
    2016年工作总结和计划
    【价值观】大牛们的经典语录
    大话 程序猿 眼里的 接口
    【C#公共帮助类】DateTimeHelper设置电脑本地时间,实际开发很需要
  • 原文地址:https://www.cnblogs.com/jinxingerhuo/p/9734625.html
Copyright © 2011-2022 走看看