美团笔试题 java各位佬们帮我分析一下前三题
前三题通过率只有30、40、16我不理解,各位大佬们给我分析一下代码
1、第一行输入一个正整数n,代表菜品总数。
第二行输入n个正整数a_i,代表每道菜的价格。
第三行输入两个正整数x和y,x代表满减的价格,y代表红包的价格。
保证所有a_i的和大于x+y,保证会用到满减
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int sum=0;
for (int i = 0; i < n; i++) {
sum+=in.nextInt();
}
int x=in.nextInt();
int y=in.nextInt();
if (sum >x+y) {
System.out.println(sum-x-y);;
}else {
System.out.println(sum-y);
}
第一题为啥通过率只有30%
2、小美定义以下三种单词是合法的:
1. 所有字母都是小写。例如:good
2. 所有字母都是大写。例如:APP
3. 第一个字母大写,后面所有字母都是小写。例如:Alice
40%
现在小美拿到了一个单词,她每次操作可以修改任意一个字符的大小写。小美想知道最少操作几次可以使得单词变成合法的?
Scanner in = new Scanner(System.in);
String s = in.nextLine();
int count=0;
boolean first=true;
int fbig=0,fmall=0,big=0,small=0;
for (char c:s.toCharArray()) {
if (first&&Character.isUpperCase(c)) {
fbig=1;
first=false; //第一个字母是大写
}else if (first&&Character.isLowerCase(c)) {
fmall=1;
first=false; //第一个字母是小写
}
if (!first&&Character.isUpperCase(c)) {
big++;
} else if (!first&&Character.isLowerCase(c)) {
small++;
}
}
if (fbig == 1) {
//全大写 或者第一个大写后面小写 再或者全变小写
int all_big=small;
int fb_as=big;
int all_small=1+big;
System.out.println(Math.min(all_big,fb_as));
}else {
int all_big=1+small;
int fb_as=1+big;
int all_small=big;
System.out.println(Math.min(all_big,all_small));
}
为啥通过率只有40%,各位佬帮看看,感觉都考虑到了阿
3、 第一行输入两个正整数n,q,代表数组的大小和操作次数。
第二行输入n个正整数a_i,代表数组的元素。
第三行输入一个正整数q,代表操作的次数。
接下来的q行,每行输入一个正整数x_i,代表第i次操作未被翻倍的元素。
输出
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int q = in.nextInt();
float[] nums = new float[n];
for (int i = 0; i < n; i++) {
nums[i] = in.nextInt();
}
for (int i = 0; i < q; i++) {
int x = in.nextInt();
for (int j = 0; j < nums.length; j++) {
if (j + 1 != x) {
nums[j] = nums[j] * 2;
}
}
}
float sum = 0;
for (float x : nums) {
sum += x;
}
System.out.println((int)(sum %(Math.pow(10,9)+7)));
}
第三题通过率16%我不理解 是我太菜了吗?各位佬们帮我分析分析是哪里出问题了
#美团笔试##悬赏#