洛谷数组题目 冰雹猜想 java
首先这道题就是一个用来测试while循环的题目
如果用for循环的话 每次的n没办法再次判定 这时候用的是if语句 if语句没办法拐回去在判定一回 所以我们用while循环来解答此题
每次对n进行偶数奇数的操作时都会对n进行特判
代码如下:
Scanner scan =new Scanner(System.in);
int[] arr=new int[1002];
int n=scan.nextInt();
int i=1;
while(n!=1){
arr[i]=n;
i++;
if(n%2==0){
n=n/2;
}
else{
n=n*3+1;
}
}
arr[i]=1;
for(int j=i;j>=1;j--){
System.out.print(arr[j]+" ");
}
由于n最后判定为1的时候会跳出whiel循环,这时候arr【i】是没有n赋值的 也就是说会出现0
来替代 因此我们需要将这时候的arr[i]直接赋值为1;这样才是完整的倒序输出,
洛谷 数组题 校门外的树
首先,需要明确的是 不同区间之间需要拔掉的树是可以重合的,那么如何处理这部分重合的树就是解这道题的关键。也就是“标记”
首先我们可以先把所有有树的标记一下,然后在根据区间来将数组里面的“树”一个个标记,也就是拔掉。
最后统计一下我们最开始进行标记的树木,也就是数组里面为0的个数,来得出哪些没有被区间覆盖。
代码如下:
Scanner scan =new Scanner(System.in);
int L=scan.nextInt();
int m=scan.nextInt();
int sum=0;
int[] arr=new int[10001];
for(int i=0;i<=L;i++){
arr[i]=0;
}
while (m>0) {
m--;
int u=scan.nextInt();
int v=scan.nextInt();
for(int i=u;i<=v;i++){
if(arr[i]==0)
arr[i]=1;
}
}
for(int j=0;j<=L;j++){
if(arr[j]==0) sum++;
}
System.out.print(sum);
需要注意的是开始开的数组是100 而题目中说的是10的四次方,开始开小了,交了一发显示re 开到10001 就直接ac了
洛谷 旗鼓相当的对手 java
Scanner scan=new Scanner (System.in);
int N=scan.nextInt();
int S=N;
int[] arr1=new int[1005];
int[] arr2=new int[1005];
int[] arr3=new int[1005];
int[] arr4=new int[10005];
int cnt=0;
int i=0;
while(N>0){
arr1[i]=scan.nextInt();
arr2[i]=scan.nextInt();
arr3[i]=scan.nextInt();
arr4[i]=arr1[i]+arr2[i]+arr3[i];
N--;
i++;
}
for(int k=0;k<S;k++){
for(int j=k+1;j<S;j++){
if (Math.abs(arr1[k] - arr1[j]) <= 5 &&
Math.abs(arr2[k] - arr2[j]) <= 5 &&
Math.abs(arr3[k] - arr3[j]) <= 5 &&
Math.abs(arr4[k] - arr4[j]) <= 10) {
cnt++;
}
}
}
System.out.print(cnt);
首先需要抓住题目中的关键的点就是 我们需要每次都要比较每个同学的语文数学英语的差值的不大于5 还有总分不大于10 给予这两点 我们可以开四个数组 三个数组记录每次每位同学的各科的分数 然后我们再来一次循环在比较每个同学比如arr1 1同学和arr1 2同学也就是1同学和2同学的语文的差值 。
值得注意的是我们需要取绝对值 因为小于5也有负数的情况也会算进去 会将旗鼓相当的对数变得更大。
采用Math.abs来对每科的数值的差值进行取绝对值。