day10—编程题

时间:2023-01-23 01:13:03

1.第一题

1.1题目

描述:
给定一个二维数组board,代表棋盘,其中元素为1的代表是当前玩家的棋子,0表示没有棋子,-1代表是对方玩家的棋子。当一方棋子在横竖斜方向上有连成排的及获胜(及井字棋规则),返回当前玩家是否胜出。

1.2思路

  1. 检查每一行的个数是否可以取胜
  2. 检查每一列的个数是否可以取胜
  3. 检查主对角线的个数是否可以取胜
  4. 检查副对角线的个数是否可以取胜

1.3解题

import java.util.*;
public class Board {
    public boolean checkWon(int[][] board) {
        int N = board.length;
        int sum = 0;
        //检查每一行的个数是否可以获胜
        for (int i = 0; i < N; i++) {
            //计算完每一行后sum要清零
            sum = 0;
            for (int j = 0; j < N; j++) {
                sum += board[i][j];
            }
            if (sum == N) {
                return true;
            }
        }
        //检查每一列的个数是否可以获胜
        for (int i = 0; i < N; i++) {
            //计算完每一列后sum要清零
            sum = 0;
            for (int j = 0; j < N; j++) {
                sum += board[j][i];
            }
            if (sum == N) {
                return true;
            }
        }
        //检查主对角线的个数是否可以获胜
        sum = 0;
        for (int i = 0; i < N; i++) {
            sum += board[i][i];
            if (sum == N) {
                return true;
            }
        }
        //检查副对角线的个数是否可以获胜
        sum = 0;
        for (int i = 0; i < N; i++) {
            sum += board[i][N - i - 1];
            if (sum == N) {
                return true;
            }
        }
        //以上四个方式都不可以
        return false;
    }
}

2.第二题

2.1题目

描述:
密码按如下规则进行计分,并根据不同的得分为密码进行安全等级划分。
一、密码长度:
5 分: 小于等于4 个字符
10 分: 5 到7 字符
25 分: 大于等于8 个字符
二、字母:
0 分: 没有字母
10 分: 密码里的字母全都是小(大)写字母
20 分: 密码里的字母符合”大小写混合“
三、数字:
0 分: 没有数字
10 分: 1 个数字
20 分: 大于1 个数字
四、符号:
0 分: 没有符号
10 分: 1 个符号
25 分: 大于1 个符号
五、奖励(只能选符合最多的那一种奖励):
2 分: 字母和数字
3 分: 字母、数字和符号
5 分: 大小写字母、数字和符号
最后的评分标准:
大于等于 90: 非常安全
大于等于 80: 安全(Secure)
大于等于 70: 非常强
大于等于 60: 强(Strong)
大于等于 50: 一般(Average)
大于等于 25: 弱(Weak)
大于等于 0: 非常弱(Very_Weak)
对应输出为:
VERY_SECURE
SECURE
VERY_STRONG
STRONG
AVERAGE
WEAK
VERY_WEAK
请根据输入的密码字符串,进行安全评定
输入描述:
输入一个string的密码
输出描述:
输出密码等级

2.2涉及的相关知识

熟悉阿斯克码表:
大写字母的阿斯克码值为65-90
小写字母的阿斯克码值为97-122
数字的阿斯克码值为48-57

2.3思路

分别统计数字字母符号的得分,然后加上奖励的得分,最后进行评定

2.4解题

import java.util.Scanner;
public class Main {
    //计算密码长度的得分
    public static int getLen(String str) {
        if (str.length() <= 4) {
            return 5;
        } else if (str.length() >= 8) {
            return 25;
        } else {
            return 10;
        }
    }
    //计算字母的得分
    public static int getChar(String str) {
        int big = 0;
        int small = 0;
        for (int i = 0; i < str.length(); i++) {
            if (str.charAt(i) >= 65 && str.charAt(i) <= 90) {
                big++;
            } else if (str.charAt(i) >= 97 && str.charAt(i) <= 122) {
                small++;
            }
        }
        if (big == 0 && small == 0) {
            return 0;
        } else if (big > 0 && small > 0) {
            return 20;
        } else {
            return 10;
        }
    }
    //计算数字的得分
    public static int getNum(String str) {
        int num = 0;
        for (int i = 0; i < str.length(); i++) {
            if (str.charAt(i) - '0' >= 0 && str.charAt(i) - '0' <= 9) {
                num++;
            }
        }
        if (num == 1) {
            return 10;
        } else if (num > 1) {
            return 20;
        } else {
            return 0;
        }
    }
    //计算符号得分
    public static int getSys(String str) {
        int num = 0;
        for (int i = 0; i < str.length(); i++) {
            if (!(str.charAt(i) >= 65 && str.charAt(i) <= 90) && !(str.charAt(i) >= 97 && str.charAt(i) <= 122) && !(str.charAt(i) - '0' >= 0 && str.charAt(i) - '0' <= 9) ) {
                num++;
            }
        }
        if (num == 1) {
            return 10;
        } else if (num > 1) {
            return 25;
        } else {
            return 0;
        }
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        int sum1 = getLen(str);
        int sum2 = getChar(str);
        int sum3 = getNum(str);
        int sum4 = getSys(str);
        int sum = 0;
        //统计最终得分
        if(sum2 == 20 && sum3 >= 10 && sum4 >= 10){
            sum = sum1 + sum2 + sum3 + sum4 + 5;
        }else if(sum2 == 10 && sum3 >= 10 && sum4 >= 10){
            sum = sum1 + sum2 + sum3 + sum4 + 3;
        }else if(sum2 == 10 && sum3 >= 10){
            sum = sum1 + sum2 + sum3 + sum4 + 2;
        }else {
            sum = sum1 + sum2 + sum3 + sum4;
        }
        //输出最终结果
        if(sum >= 90){
            System.out.println("VERY_SECURE");
        }else if(sum >= 80){
            System.out.println("SECURE");
        }else if(sum >= 70){
            System.out.println("VERY_STRONG");
        }else if(sum >= 60){
            System.out.println("STRONG");
        }else if(sum >= 50){
            System.out.println("AVERAGE");
        }else if(sum >= 25){
            System.out.println("WEAK");
        }else {
            System.out.println("VERY_WEAK");
        }
    }
}