每日一题10

1. 井字棋

题目描述:

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

示例:
输入:1[[1,0,1],[1,-1,-1],[1,-1,0]]
输出:true
OJ链接
解题思路:

1、最简单的是3 * 3样式,这时根据规则判断行,和是否为3,为3表示我方获胜,返回true;
2、判断列,和是否为3,为3表示我方获胜,返回true;
3、判断主对角线,和是否为3,为3表示我方获胜,返回true;
4、判断副对角线,和是否为3,为3表示我方获胜,返回true;
5、如若是n * n,原理一样,只需要判断和是否为n就可以。

代码如下:
import java.util.*;

public class Board {
    public boolean checkWon(int[][] board) {
        int len = board.length;
        int sum = 0;
        //判断行
        for (int i = 0; i < len; i++) {
            for (int j = 0; j < len; j++) {
                sum += board[i][j];//判断行的和,列不变
            }
            if (sum == len) {
                return true;
            }
        }
        //判断列
        for (int i = 0; i < len; i++) {
            sum = 0;
            for (int j = 0; j < len; j++) {
                sum += board[j][i];//判断列的和,行不变
            }
            if (sum == len) {
                return true;
            }
        }
        //判断主对角线
        sum = 0;
        for (int i = 0; i < len; i++) {
            sum += board[i][i];
        }
        if (sum == len) {
            return true;
        }
        //判断副对角线
        sum = 0;
        for (int i = 0; i < len; i++) {
            sum += board[i][len-1-i];
        }
        if (sum == len) {
            return true;
        }
        //都不是
        return false;
    }
}

2.密码强度等级

题目描述:

密码按如下规则进行计分,并根据不同的得分为密码进行安全等级划分。

一、密码长度:

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_SECURE

SECURE

VERY_STRONG

STRONG

AVERAGE

WEAK

VERY_WEAK

请根据输入的密码字符串,进行安全评定。

注:

字母:a-z, A-Z

数字:0-9

符号包含如下: (ASCII码表可以在UltraEdit的菜单view->ASCII Table查看)

!"#$%&’()*+,-./ (ASCII码:0x21~0x2F)

:;<=>?@ (ASCII码:0x3A~0x40)

[]^_` (ASCII码:0x5B~0x60)

{|}~ (ASCII码:0x7B~0x7E)

示例:
输入://本题含有多组输入样例。每组样例输入一个string的密码
38$@NoNoNo
123
输出://每组样例输出密码等级
VERY_SECURE
WEAK
说明:
//第一组样例的密码长度大于等于8个字符,得25分;大小写字母都有所以得20分;有两个数字,所以得20分;包含大于1符号,所以得25分;
//由于该密码包含大小写字母、数字和符号,所以奖励部分得5分,经统计得该密码的密码强度为25+20+20+25+5=95分。
OJ链接
解题思路:

根据题目写,注意最好每一个判断写成一个函数。

代码如下:
import java.util.*;
public class Main {
	public static void main(String[] args){
		Scanner sc=new Scanner(System.in);
		while(sc.hasNextLine()){
			String str=sc.nextLine();
			int sum1=getLen(str);
			int sum2=getChar(str);
			int sum3=getNum(str);
			int sum4=getSym(str);
			int sum=0;
			if(sum2==20&&sum3>=1&&sum4>=1){
				sum=sum1+sum2+sum3+sum4+5;
			}else if(sum2==10&&sum3>=1&&sum4>=1){
				sum=sum1+sum2+sum3+sum4+3;
			}else if(sum2==10&&sum3>=1&&sum4==0){
				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 if(sum>=0){
				System.out.println("VERY_WEAK");
			}
		}
	}
	
	public static int getLen(String str){
		if(str.length()<=4){
			return 5;
		}else if(7>=str.length()&&str.length()>=5){
			return 10;
		}else if(str.length()>=8){
			return 25;
		}
		return 0;
	}
	
	public static int getChar(String str){
		int small=0;
		int big=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(small>0&&big>0){
			return 20;
		}else if(small>0||big>0){
			return 10;
		}else{
			return 0;
		}
	}
	
	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 20;
		}else if(num==1){
			return 10;
		}else{
			return 0;
		}
	}
	
	public static int getSym(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 25;
		} else if (num == 1) {
			return 10;
		{ else {
			return 0;
		}
	}			
}		
### 关于C语言选择题练习的相关资源 对于希望提高C语言能力的学习者来说,通过做选择题可以快速掌握基础知识并检验自己的理解程度。以下是关于C语言选择题的一些推荐方向和相关内容: #### 资源推荐 1. **《C语言入门必刷100题》系列** 这一系列包含了丰富的编程实践题目[^1],虽然主要以实际编码为主,但在其中也穿插了一些理论性的选择题,帮助巩固基本概念。 2. **《C C++最全每日亿题》** 此系列不仅提供了大量的编程实战训练,还特别针对初学者设计了许多基础知识点的选择题练习[^4]。这些题目覆盖了变量、数据类型、控制结构等多个方面。 3. **字符串处理专题** 题目描述中提到的一个典型例子是统计字符串中的不同字符种类[^2]。这类问题可以通过设置多项选项来考察学生对条件判断的理解以及逻辑思维能力。 4. **算法与程序设计教程** 结合具体实例进行讲解的文章通常会附带测试性质的小测验[^3],这对于想要全面了解某一特定主题下的各种可能性非常有帮助。 #### 示例代码片段 下面给出一段简单的示例代码用于展示如何利用if-else语句完成基于条件分支的操作: ```c #include <stdio.h> int main() { int i; for (i = 1; i <= 10; ++i) { if (i % 3 != 0){ printf("%d ", i); } else{ continue; } } return 0; } ``` 该段代码展示了当`i`能够被3整除时跳过打印操作的过程。 #### 总结 为了更好地准备C语言考试或者自我评估水平,建议综合运用上述提到的各种资源来进行系统化的复习和练习。同时注意积累常见错误案例以便加深印象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值