Day1_20240318_java刷题

P1046 [NOIP2005 普及组] 陶陶摘苹果

题目描述

陶陶家的院子里有一棵苹果树,每到秋天树上就会结出 1010 个苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个 3030 厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。

现在已知 1010 个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹果的数目。假设她碰到苹果,苹果就会掉下来。

输入格式

输入包括两行数据。第一行包含 1010 个 100100 到 200200 之间(包括 100100 和 200200)的整数(以厘米为单位)分别表示 1010 个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。第二行只包括一个 100100 到 120120 之间(包含 100100 和 120120)的整数(以厘米为单位),表示陶陶把手伸直的时候能够达到的最大高度。

输出格式

输出包括一行,这一行只包含一个整数,表示陶陶能够摘到的苹果的数目。

输入输出样例

输入 #1

100 200 150 140 129 134 167 198 200 111
110

 输出 #1

5

代码 :

第一次刷:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int[] arr = new int[10];
        int h2 = 30;
        for (int i = 0; i < 10; i++) {
            arr[i] = scanner.nextInt();
        }
        int hight = scanner.nextInt();//输入人碰到的最大高度
        int hight2 = hight + h2;//最大高度
        int count = 0;
        for (int i = 0; i < 10; i++) {//比较
            if(hight2 >= arr[i]){
                count++;
            }
        }
        System.out.println(count);
    }
}

P1047 [NOIP2005 普及组] 校门外的树

题目描述

某校大门外长度为 �l 的马路上有一排树,每两棵相邻的树之间的间隔都是 11 米。我们可以把马路看成一个数轴,马路的一端在数轴 00 的位置,另一端在 �l 的位置;数轴上的每个整数点,即 0,1,2,…,�0,1,2,…,l,都种有一棵树。

由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。

输入格式

第一行有两个整数,分别表示马路的长度 �l 和区域的数目 �m。

接下来 �m 行,每行两个整数 �,�u,v,表示一个区域的起始点和终止点的坐标。

输出格式

输出一行一个整数,表示将这些树都移走后,马路上剩余的树木数量。

输入输出样例

输入 #1

500 3
150 300
100 200
470 471

输出 #1

298

 代码:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int l = scanner.nextInt();//马路的长度 大写L 区域的个数
        int m= scanner.nextInt();
        int n = 2*m;//输入n个区域两端的整数点
        int[] arr = new int[20000];//要满足1 <=L <= 1000
        for (int i = 0; i <= l; i++) {
            arr[i] = 1;
        }
        int[] nm = new int[n];//输入区间的开头和结尾

        for (int i = 0; i < n; i++) {
            nm[i] = scanner.nextInt(); 
        }
        for (int i = 0; i < n; i++) {
            if(i % 2 == 0){
            for (int j = nm[i]; j <=nm[i+1] ; j++) {
                arr[j] = 0;
            }
            }
        }
        int count = 0;
        for (int i = 0; i <= l; i++) {
            if(arr[i] != 0) {
            count++;
            }
        }
        System.out.println(count);

        }
}

P1059 [NOIP2006 普及组] 明明的随机数

题目描述

明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了 �N 个 11 到 10001000 之间的随机整数 (�≤100)(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。

输入格式

输入有两行,第 11 行为 11 个正整数,表示所生成的随机数的个数 �N。

第 22 行有 �N 个用空格隔开的正整数,为所产生的随机数。

输出格式

输出也是两行,第 11 行为 11 个正整数 �M,表示不相同的随机数的个数。

第 22 行为 �M 个用空格隔开的正整数,为从小到大排好序的不相同的随机数。

输入输出样例

输入 #1

10
20 40 32 67 40 20 89 300 400 15

输出 #1复制

8
15 20 32 40 67 89 300 400

 代码:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);//输入式子的个数N
        int N = scanner.nextInt();
        int[] a = new int[101];

        for (int i = 0; i < N; i++) {//生成N个的随机数字
            a[i] = scanner.nextInt();//给随机数字赋值
        }

        int flag = 0;//标记重复的
        int cou = 0;//标记重复的个数
        for (int i = 0; i < N; i++) {
            if (a[i] == 0) {
                continue;
            }

            flag = a[i];
            for (int j = i + 1; j < N; j++) {
                if (a[j] == flag) {
                    a[j] = 0;
                    cou++;
                }
            }

        }
        int[] b = new int[N - cou];
        int n = 0;
        for (int i = 0; i < N; i++) {
            if (a[i] != 0) {

                b[n] = a[i];
                n++;
            }
        }
        //挑选出重复的并标记:赋值0
        for (int i = 0; i < N - cou; i++) {
            for (int j = 0; j < N - cou - i - 1; j++) {//排序
                if (b[j] > b[j + 1]) {
                    int tmp = b[j];
                    b[j] = b[j + 1];
                    b[j + 1] = tmp;
                }
            }
        }
        System.out.println(N - cou);
        for (int i = 0; i < N - cou; i++) {
            System.out.print(b[i]);
            System.out.print(' ');
        }
    }

}

  • 16
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值