腾讯2020正式批暑期实习生春招Java后台笔试题
第一题:
测试用例
20 4
1
2
5
10
输出:5
private static void problem1() {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
int m=sc.nextInt();
int n=sc.nextInt();
int []coin=new int[n+1];
for(int i=1;i<=n;i++){
coin[i]=sc.nextInt();
}
coin[0]=0;
Arrays.sort(coin);
if(coin[1]!=1)
System.out.println(-1);
int sum=0;
int count=0;
while(true){
if(sum>=m){
System.out.println(count);
return;
}
for(int i=n;i>=1;i--){
if(coin[i]<=sum+1){
sum+=coin[i];
count++;
break;
}
}
}
}
第二题:
测试用例:
4
1100
输出 :0
5
01010
输出:1
private static void problem2() {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
String s=sc.next();
int count=0;
for(int i=0;i<s.length();i++){
if(s.charAt(i)=='0')
count++;
}
System.out.println(Math.abs(n-2*count));
}
第三题:
测试用例:
3
8 5 10
1 1 2
贪心,打的过不打,打不过就贿赂,竟然水过
private static void problem3() {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int n=sc.nextInt();
long[] monster=new long[n];
int[] gold=new int[n];
for(int i=0;i<n;i++){
monster[i]=sc.nextLong();
}
for(int i=0;i<n;i++){
gold[i]=sc.nextInt();
}
int[] dp=new int[n];
dp[0]=gold[0];
long sum=monster[0];
for(int i=1;i<n;i++){
if(sum<monster[i]){
dp[i]=dp[i-1]+gold[i];
sum=sum+monster[i];
}
else{
dp[i]=dp[i-1];
}
}
System.out.println(dp[n-1]);
}