题目描述
请设计一个算法能够完成两个用字符串存储的整数进行相加操作,对非法的输入则返回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]); } }