大神帮我看看我这哪有问题
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
while (cin.hasNext()) {
int n=cin.nextInt();
List<Integer> list=new ArrayList<>();
for(int i=0;i<n;i++){
list.add(cin.nextInt());
}
if (n == 1)
System.out.println(0);
if (n == 2) {
if (list.get(0) == list.get(1))
System.out.println(1);
else System.out.println(0);
} else if (n > 2) {
int count = 0;
for (int i = 0; i < n; i++) {
int left = 0;
int right = 0;
for (int j = 0; j <= i; j++) {
left += list.get(j);
}
for (int j = n - 1; j > i; j--) {
right += list.get(j);
}
if (left != right) {
count++;
}
}
System.out.println(n - count);
}
}
}
}
var arr; var n = read_line(); var result=1; var find = true; var array = new Array(); while(arr = read_line()){ arr = arr.split(' '); //find min var min = arr[0]; for(var x = 0;x < n; x++){ if(arr[x] < min) min = arr[x]; } for(var i = 1; i <= min; i++){ for(var j = 0; j < n; j++){ if(arr[j] % i == 0){ array[j] = 1; } } for(var y = 0; y <array.length; y++){ if(array[y] !== 1) find = false; } if(find == true) result = i; } print(result); }
第一题ac 10%,大神们看看什么问题
第二题也是ac 10%,求解答:
/* 在大年三十的晚上,小明不想看春晚,就在网上报名了一场网络程序设计比赛,比赛将于20:00开始,持续4个小时,之到午夜。 比赛中会有n个问题,按照难度排序,也就是说,第一个问题是最简单的,最后一个问题是最难的。小明知道他解决第k个问题需要k * 5分钟。 小明的父母允许小明不看春晚,但要求他必须参加跨年,就是小明必须在12.00或者12.00之前赶到客厅和父母一起跨年。 他需要m分钟从房间走到客厅。请问,小明在去参加跨年之前最多能解决多少问题。 每个样例输入两行,每行一个整数,n和m,(1 ≤ n ≤ 10, 1 ≤ m ≤ 240) 。 输出小明最多能解决的问题数。 */ var n = read_line(); var m = read_line(); const allTime = 240; var time = m,k = 0; for(var i=1; i<=n; i++){ time += i*5; if(time <= allTime){ k++; } } print(k);
第三题没通过,什么问题啊
/* 小B正处于百无聊赖中,提不起干活的兴趣。看到桌面上的一条带着方格纸带,于是随手拿起一支笔, 在纸带的每个方格中写上一个随机想起的数字。然后把纸带折起来撕成两半,她突然发现两半中各个数值加起来的和竟然是一样的。 小B一下子有了一点精神,她想知道可以有多少种方式把纸带撕成两半,仍然使得两边的数值之和是相等的。你能帮她吗! 测试数据有多组,每组测试数据的第一行为一个整数n(1=< n <=100000),为纸带上的方格数,第二行为n个空格分隔的数值,为小B写入方格的数值,所有的数都是绝对值不超过10000的整数。 对每组测试数据,在单独的行中输出不同撕法的总数,使得两边纸带中的数值之和相等。将纸带撕成两半时,只能沿方格的边缘撕开。 */ var left = 0; var right= 0; var num = 0; var n = 0; while(n = read_line()){ var arr = read_line(); arr = Number(arr.split(' ')); for(var i = 0; i < n-1; i++){ for(var l = 0; l <= i; l++){ left += arr[l]; } for(var r = i+1; r <= n-1; r++){ right +=arr[r]; } if(left == right) num++; } print(num); }
最后一题我是这么写的 import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner sc = new Scanner(System.in); while(sc.hasNext()){ int n = sc.nextInt(); int[] num = new int[n]; for(int i=0;i<num.length;i++){ num[i]=sc.nextInt(); } int sum=0; for(int i=0;i<num.length;i++){ sum=num[i]+sum; } if(sum%2==0){ int sumto=sum/2; int test=0; int count=0; for(int i=0;i<num.length-1;i++){ test=test+num[i]; if(sumto==test){ count++; } } System.out.println(count); }else{ System.out.println(0); } } } }
O(n)写法 ™的真是太坑了没想起来啊
int sumEqual(int *array,int length) { if(array==NULL||length<=0) return -1; int sumLeft=array[0]; int sumRight=0; int pSum=0; for(int i=1;i<length;i++) { sumRight+=array[i]; } for(int i=1;i<length;i++) { if(sumLeft==sumRight) pSum++; sumLeft+=array[i]; sumRight-=array[i]; } return pSum; }
三题全ac,选择不确定
第一题求公约数(看了很久才看明白题意)。我的方法就是读数的时候顺便找出最小的一个数,接着求出最小的数的全部约数,然后从最大的约数起,验证是否是全部数的约数,是就输出。
第二题很直接,就用贪心算法做,不过要注意边界
第三题我用的方法是用两个int(suml,sumr)储存左边和右边的和,一个int(n)存储有几种撕法,在读取数据(数据存在num[i])的时候顺便求和,值存在sumr里,然后从i=0起,到i=n-1,依次计算suml+=num[i],sumr-=num[i],判断sumr==suml,相等就n++;这个方法时间复杂度是o(n)。需要注意的是方格数只有1的情况,这种情况应该输出0,我就是没考虑这个情况,前几次提交只过了80%。
总体来说,题目很简单,测试数据也很少,基本不需要考虑时间复杂度。
-----------------------------------------------------------------------------
题外话,从三月到现在,过了几家大公司的笔试面试却没过,心真累。而且公司基本在外地,面试一次就得花1000,钱包也受不了。人人网这个过了我都不想去面试了。想等毕业找个小公司实习,争取2年后做个独立开发者。
现在受的苦都是秋招时脑子进的水呀~~~~~~~~