数组做题笔记

第一题:

https://www.luogu.com.cn/problem/P1428

思路:

答案是每两个数用空格隔开,不能用println()

AC: System.out.print(sum+" ");

第二题:

https://www.luogu.com.cn/problem/P1427

题目描述
小鱼最近被要求参加一个数字游戏,要求它把看到的一串数字 ai(长度不一定,以 0 结束),记住了然后反着念出来(表示结束的数字 00 就不要念出来了)。这对小鱼的那点记忆力来说实在是太难了,你也不想想小鱼的整个脑袋才多大,其中一部分还是好吃的肉!所以请你帮小鱼编程解决这个问题。
输入格式
一行内输入一串整数, 以 0 结束以空格间隔
输出格式
一行内倒着输出这一串整数, 以空格间隔
输入输出样例
输入 #1复制
3 65 23 5 34 1 30 0
输出 #1复制
30 1 34 5 23 65 3
说明/提示
数据规模与约定
对于100% 的数据,保证 0≤ ai≤231−1,数字 个数不超过 100

思路:

数组长度不一定,又因为个数不超过100,所以将数组长度初始化为100;

以0结束,所以输入时,判断结束条件是输入值为0;

输出时,不是从第100个数开始输出,而是从倒数第一个不为0的数开始输出,所以用sum计一共有多少个不为0的数,并且i是从sum-2开始。

代码:

import java.util.Scanner;
class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int arr[] = new int[100];
        int sum =0;
        for(int i =0;i<100;i++) {
            int x = sc.nextInt();
            arr[i] = x;
            sum++;
            if(arr[i]==0) {
                break;
            }
        }
        for(int i=sum-2;i>=0;i--) {
            System.out.print(arr[i]+" ");
        }
    }
}

第三题:

https://www.luogu.com.cn/problem/P5727

题目描述
给出一个正整数 n,然后对这个数字一直进行下面的操作:如果这个数字是奇数,那么将其乘 3 再加 1,否则除以 2。经过若干次循环后,最终都会回到 1。经过验证很大的数字(7×10^11)都可以按照这样的方式比变成 1,所以被称为“冰雹猜想”。例如当 n n 是 20,变化的过程是 20→10→5→16→8→4→2→1。
根据给定的数字,验证这个猜想,并从最后的 1开始,倒序输出整个变化序列。
输入格式
输入一个正整数 n。
输出格式
输出若干个由空格隔开的正整数,表示从最后的 1 开始倒序的变化数列。
输入输出样例
输入 #1复制
20
输出 #1复制
1 2 4 8 16 5 10 20
说明/提示
数据保证,1≤ n≤100。

思路:

判断奇偶数时,第二个if前要记得加else,不然执行完第一个if后会执行第二个,导致a[i]的值是第二个if里面的值;

结束条件:在外面写while(n!=1),而不在里面用if判断

数组a[ ]的空间要开大一点,不然就无法AC

代码:

import java.util.Scanner;
class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n =sc.nextInt();
        int a[] = new int[1000];
        int sum =1;
        a[0]=n;
        int i =1;
        while(n!=1) {//在外面写while(n!=1),而不在里面用if判断
        //for(int i=1;;i++) {
            if(n%2!=0) {
                n=n*3+1;
                a[i] = n;
                sum++;
                i++;
            }
            else if(n%2==0) {//要记得加else
                n=n/2;
                a[i] = n;
                sum++;
                i++;
            }
            /*if(n==1) {
                break;
            }*/
        }
    
        for(int j=sum-1;j>=0;j--) {
            System.out.print(a[j]+" ");
        }
    }
}

第四题:

https://www.luogu.com.cn/problem/P5728

题目描述
现有 N N 名同学参加了期末考试,并且获得了每名同学的信息:语文、数学、英语成绩(均为不超过 150的自然数)。如果某对学生 < i, j> 的每一科成绩的分差都不大于 5,且总分分差不大于 10,那么这对学生就是“旗鼓相当的对手”。现在想知道这些同学中,有几对“旗鼓相当的对手”?同样一个人可能会和其他好几名同学结对。
输入格式
第一行一个正整数 N。
接下来 N行,每行三个整数,其中第 i 行表示第 i名同学的语文、数学、英语成绩。最先读入的同学编号为 1。
输出格式
输出一个整数,表示“旗鼓相当的对手”的对数。
输入输出样例
输入 #1复制
3 90 90 90 85 95 90 80 100 91
输出 #1复制
2
说明/提示
数据保证,2≤ N≤1000 且每科成绩为不超过 150 的自然数。

思路:

定义二维数组a[][]存放成绩sum[]存放三科总分;

分别比较第i位同学(从1开始)i之前每位同学(从0开始)的成绩,符合则加一;

特别注意数组最后一个的下标是N-1,所以i<=N-1,刚开始写i<=N导致数组越界……

代码:

import java.util.Scanner;
class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int a[][] = new int[N][3];
        int sum[] = new int[N];
        int count=0;
        for(int i = 0;i<N;i++) {
                a[i][0] = sc.nextInt();
                a[i][1] = sc.nextInt();
                a[i][2] = sc.nextInt();
                sum[i]=a[i][0]+a[i][1]+a[i][2];
        }
        for(int i = 1;i<=N-1;i++) {//N要-1!!!
            for(int z=0;z<i;z++) {//从0开始
                if(Math.abs(a[i][0]-a[z][0])<=5&&
                    Math.abs(a[i][1]-a[z][1])<=5&&
                    Math.abs(a[i][2]-a[z][2])<=5&&
                    Math.abs(sum[i]-sum[z])<=10) {
                    count++;
                }    
            }
        }
        System.out.println(count);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值