java 洛谷 算法1_1系列 P1042 P2670 java题解

java 洛谷P1042 乒乓球

第一次没满分,上网搜了一下规则,达到满分,思路规则如下
在这里插入图片描述

题解

设华华得分sumW,对手得分sumL;

题意:

  1. 给定字符串,出现W时sumW++,出现L时sumL++;
  2. 结束比赛标志(比赛规则):
    11分制,当一方先达到11分,且双方成绩差大于2,结束比赛,输出双方分数;
    21分制,当一方先达到21分,且双方成绩差大于2,结束比赛,输出双方分数;
    或遇见E,比赛结束,输出双方分数
代码:
import java.util.Scanner;

public class P1042乒乓球 {


    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        StringBuilder stringBuilder = new StringBuilder();
        while (scanner.hasNext()) {
            String string = scanner.nextLine();
            stringBuilder.append(string);
            if (string.contains("E")) {
                break;
            }
        }
        char[] chars = stringBuilder.toString().toCharArray();
        sort2(chars,11);
        System.out.println();
        sort2(chars,21);

    }

    //分制  
    private static void sort2(char[] chars, int b) {
        int sumW = 0, sumL = 0;
        for(int i=0;chars[i]!='E';i++) {
            if(chars[i]=='W'){
                sumW++;
            }else {
                sumL++;
            }
            if(Math.abs(sumW-sumL)>=2 && (sumW>=b||sumL>=b)) {
                System.out.println(sumW+":"+sumL);
                sumW=0;sumL=0;
            }
        }
        System.out.println(sumW+":"+sumL);
    }
}

P2670扫雷游戏

  1. 题意比较简单,所以就直接附上代码啦
  2. 下面代码涉及到数组越界问题的思路
  3. 注意一下的i是从1开始的,数组总长度是arr.length+2;
/**扫描模拟时,避免数组越界问题
 * 数组整体向右平移
 */

import java.util.Scanner;

public class P2670扫雷游戏_01 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt(), m = scanner.nextInt();

        char[][] arr = new char[n + 2][m + 2];
        scanner.nextLine();
        for (int i = 1; i < arr.length - 1; i++) {
            char[] chars = scanner.nextLine().toCharArray();
            for (int j = 1; j < arr[i].length-1 ; j++) {
                arr[i][j] = chars[j-1];
            }
        }

        //初始化已成功
        mum(arr);
        for (int i = 1; i < arr.length -1; i++) {
            for (int j = 1; j < arr[i].length-1; j++) {
                System.out.print(arr[i][j]);
            }
            System.out.println();
        }

    }

    //检测周围八个有几个雷
    private static void mum(char[][] arr) {
        for (int i = 1; i < arr.length - 1; i++) {
            for (int j = 1; j < arr[i].length - 1; j++) {
                int num = 0;

                if (arr[i][j]=='*') {
                    continue;
                }else{
                    for (int m = i - 1; m <= i + 1; m++) {
                        for (int s = j - 1; s <= j + 1; s++) {
                            if ( arr[m][s] == '*') {
                                num++;
                            }
                        }
                    }
                }
                arr[i][j] = (char) (num + '0');
            }
        }
    }
}

1_1系列 后续待补充

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
洛谷p5736 【深基7.例2】质数筛是一个关于质数筛法的题目,要求我们根据输入的一个正整数n,找出小于等于n的所有质数。 质数是指只能被1和自身整除的大于1的整数,比如2、3、5、7等。质数筛法是一种常见且高效的找出质数的方法。 在这道题中,我们需要使用质数筛法来找出小于等于n的所有质数。首先,我们定义一个boolean类型的数组isPrime,用来标记每个数字是否是质数。初始时,我们将isPrime数组的所有元素都设置为true。 然后,我们从2开始遍历到n,对于每个数字i,如果isPrime[i]为true,说明这个数字是质数。那么我们就需要将i的倍数都标记为false,因为这些倍数一定不是质数。具体做法是,从2*i开始,每次增加i,将对应的isPrime数组的元素都置为false。 遍历结束后,isPrime数组中为true的元素即为小于等于n的所有质数。我们可以遍历isPrime数组,将为true的下标即为质数输出即可。 这个算法的时间复杂度是O(nloglogn),相较于直接遍历每个数字并判断是否是质数的方法,时间复杂度更低,效率更高。 对于这个题目的java实现,我们可以使用一个boolean数组isPrime来标记每个数字是否是质数,使用一个ArrayList来存储所有的质数,最后将ArrayList转化为数组输出。 代码示例如下: ``` import java.util.ArrayList; public class Main{ public static void main(String[] args){ int n = 100; // 输入的正整数n boolean[] isPrime = new boolean[n+1]; // 标记每个数字是否是质数的数组 ArrayList<Integer> primes = new ArrayList<>(); // 存储质数的ArrayList // 初始化isPrime数组 for(int i=2; i<=n; i++){ isPrime[i] = true; } // 质数筛法 for(int i=2; i<=n; i++){ if(isPrime[i]){ primes.add(i); for(int j=2*i; j<=n; j+=i){ isPrime[j] = false; } } } // 将ArrayList转化为数组输出 int[] result = new int[primes.size()]; for(int i=0; i<primes.size(); i++){ result[i] = primes.get(i); } // 输出结果 for(int i=0; i<result.length; i++){ System.out.print(result[i] + " "); } } } ``` 这样,我们就可以通过这段代码来实现洛谷p5736题目的要求,找出小于等于输入的正整数n的所有质数,并将它们按从小到大的顺序输出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

热爱代码的猿猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值