T1096,T1560,T1135

T1096,T1560,T1135

T1096

石头剪刀布是常见的猜拳游戏。石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一样,则不分胜负。

一天,小 AA 和小 BB 正好在玩石头剪刀布。已知他们的出拳都是有周期性规律的,比如:“石头-布-石头-剪刀-石头-布-石头-剪刀……”,就是以“石头-布-石头-剪刀”为周期不断循环的。请问,小 AA 和小 BB 比了 NN 轮之后,谁赢的轮数多?

解析:arrayA 记录小A出拳的规律,arrayB 记录小B出拳的规律,arrayResult 记录不同情况下 AB出拳A的输赢情况,1 表示A赢 -1 表示A输
每轮都对 arrayA,arrayB取模值,查询在 arrayResult 中的结果,最后对结果进行分类处理,输出最后结果

package com.java3.ch2;
import java.util.Arrays;
import java.util.Scanner;
public class T1096 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        int N = scan.nextInt();//比较N轮
        int NA = scan.nextInt();//A出拳的周期长度
        int NB = scan.nextInt();//B出拳的周期长度

        int[] arrayA = new int[NA];//记录小A出拳的规律
        int[] arrayB = new int[NB];//记录小B出拳的规律

        for(int i = 0;i < arrayA.length;i++) {
            arrayA[i] = scan.nextInt();
        }

        for(int i = 0;i < arrayB.length;i++) {
            arrayB[i] = scan.nextInt();
        }
        
        //测试数据接收
        //System.out.println("A出拳:" + Arrays.toString(arrayA));
        //System.out.println("B出拳:" + Arrays.toString(arrayB));
        
        //arrayResult 记录不同情况下 AB出拳的输赢情况
        //1 表示A赢 -1 表示A输
        int[][] arrayResult = new int[6][6];
        arrayResult[0][5] = -1;
        arrayResult[0][2] = 1;
        arrayResult[5][0] = 1;
        arrayResult[5][2] = -1;
        arrayResult[2][0] = -1;
        arrayResult[2][5] = 1;

        //记录A赢的次数
        int isAWin = 0;
        for(int i = 0;i < N;i++) {
            int A = arrayA[i % NA];
            int B = arrayB[i % NB];

            isAWin += arrayResult[A][B];
        }

        //System.out.println(isAWin);

        if(isAWin == 0) {
            System.out.println("draw");
        }else if(isAWin > 0) {
            System.out.println("A");
        }else {
            System.out.println("B");
        }
    }
}
10 3 4
0 2 5
0 5 0 2
A

T1560

蒜头君手上有个长度为 n 的数组 A。由于数组实在太大了,所以蒜头君也不知道数组里面有什么数字,所以蒜头君会经常询问整数 x 是否在数组 A 中

解析:主要是使用二分查找算法,数组A使用 int 型的 arrayA存储 ,并且需要进行排序,需要查询的m个元素使用 int 型的 arraySearch 存储

package com.java3.ch2;
import java.util.Arrays;
import java.util.Scanner;
public class T1560 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        int n = scan.nextInt();
        int m = scan.nextInt();

        int[] arrayA = new int[n];
        int[] arraySearch = new int[m];

        for(int i = 0; i < arrayA.length;i++){
            arrayA[i] = scan.nextInt();
        }

        for(int i = 0; i < arraySearch.length;i++){
            arraySearch[i] = scan.nextInt();
        }

        //测试数据接收
        //System.out.println("arrayA : " + Arrays.toString(arrayA));
        //System.out.println("arraySearch : " + Arrays.toString(arraySearch));

        //对数组A进行排序 从小到大 sort()方法无返回值
        Arrays.sort(arrayA);

        for(int i = 0;i < arraySearch.length;i++){
            int isFlag = binarySearch(arrayA,arraySearch[i]);
            if(isFlag == -1){
                System.out.println("NO");
            }else{
                System.out.println("YES");
            }
        }
    }

    public static int binarySearch(int[] srcArray,int des){
        //定义初始最小,最大索引
        int start = 0;
        int end = srcArray.length - 1;

        //排除特殊情况
        if(des < srcArray[start] || des > srcArray[end] || start > end){
            return -1;
        }

        while(start <= end){
            //防止溢出
            int mid = start + (end - start) / 2 ;
            if(des == srcArray[mid]){
                return mid;
            }else if(des < srcArray[mid]){
                //关键字小于中间值  则关键字在左半区域
                end = mid - 1 ;
            }else{
                //关键字大于中间值  则关键字在右半区域
                start = mid + 1;
            }
        }

        //查找失败 返回-1
        return -1;
    }
}

10 5
1 1 1 2 3 5 5 7 8 9
0
1
4
9
10
NO
YES
NO
YES
NO

T1135

输入两个 n 行 m 列的矩阵 A和 B,输出它们的和 A+B

解析:使用二维数组存储矩阵A和B,对应位置元素相加,并输出即可

package com.java3.ch2;
import java.util.Scanner;
public class T1135 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        int n = scan.nextInt();
        int m = scan.nextInt();

        int[][] arrayA = new int[n][m];
        int[][] arrayB = new int[n][m];
        int[][] arrayAB = new int[n][m];

        for(int i = 0;i < n;i++) {
            for(int j = 0;j<m;j++) {
                arrayA[i][j] = scan.nextInt();
            }
        }

        for(int i = 0;i < n;i++) {
            for(int j = 0;j<m;j++) {
                arrayB[i][j] = scan.nextInt();
            }
        }

        for(int i = 0;i < n;i++) {
            for(int j = 0;j<m;j++) {
                arrayAB[i][j] = arrayA[i][j] + arrayB[i][j];
            }
        }

        for(int i = 0;i < n;i++) {
            for(int j = 0;j<m;j++) {
                System.out.print(arrayAB[i][j] + " ");
            }
            System.out.println();
        }
    }
}

3 3
1 2 3
1 2 3
1 2 3
1 2 3
4 5 6
7 8 9
2 4 6 
5 7 9 
8 10 12 

计蒜客网址

直达链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值