题目描述
某云短信厂商,为庆祝国庆,推出充值优惠活动。 现在给出客户预算,和优惠售价序列,求最多可获得的短信总条数。
输入
第一行客户预算M,其中 0 ≤ M ≤ 10^6
第二行给出售价表, P1, P2, … Pn , 其中 1 ≤ n ≤ 100 ,
Pi为充值 i 元获得的短信条数。
1 ≤ Pi ≤ 1000 , 1 ≤ n ≤ 100
输出
最多获得的短信条数
样例输入
6
10 20 30 40 60
样例输出
70
解题思路:
难点一:
首先就是弄清楚题意,n为客户所充值的钱数,Pi为商家所送的短信数。
难点二:
不要多想什么东西,输入的短信一定时充值越多,送的越多,不可能存在说 n = 3+4两个充值时,短信总数是70,而n= 7时,短信总数是60的情况,商家为利,不是傻。所以说最终利润一定是 profit= M(客户预算)/len(售价表长度)*arr1[len-1] +arr1[M%len] (去除最大的,剩下的预算所对应的短信数)。
难点三:
这是对不怎么了解过Scanner输入的人来说比较难的,如何进行输入。因为题目并没有给出售价表的长度,因此这是会用到Scanner当中的s.hasNextInt()函数进行停止输入判断。先弄一个比较大的数组进行接受,函数作用是点回车结束这次数组的输入,重新弄一个数组进行遍历操纵,就能得到我们所需要的数组的了。
直接上代码:
public static void main(String[] args) { Scanner sc = new Scanner(System.in); int M= Integer.parseInt(sc.nextLine()); String s = sc.nextLine(); Scanner s1 = new Scanner(s); int[] arr = new int[100]; int k =0; while(s1.hasNextInt()){ arr[k++]= s1.nextInt(); } int[] arr1 = new int[k]; 将 for(int i =0;i<k;i++){ arr1[i] = arr[i]; } int max = 0; int len = arr1.length; max = (M/len*arr1[len-1]+arr1[M%len-1]); System.out.println(max); }
结果:
这里只针对小菜,当然还有更好的解法,这只是为了让人更容易理解。