Java--逻辑题(更新中)

一、有一对兔子,从出生后第三个月起,每个月都生一对兔子,小兔子长到第三个月又生一对兔子,每个月兔子的总数是?

import java.util.Scanner;
    public class Rabbit {
        public static void main (String args[]) {
            int z = 0;  //当月兔子数
            int x = 1;  //上月兔子数
            int y = 1;  //上上月兔子数
            Scanner scanner = new Scanner(System.in);
            System.out.println("要计算到第几个月?");
            int month = scanner.nextInt();
            if(month!=1&&month!=2) {
                for (int i = 3; i <= month; i++) {
                    z = x + y;
                    y = x;
                    x = z;
                }
                System.out.println("第" + month + "个月有" + z + "对兔子");
            }
            else if (month == 1) {
                System.out.println("第1月有1对兔子");
            }
            else if (month == 2) {
                System.out.println("第2月有1对兔子");
            }
        }
    }

二、猴子第一天摘下若干个桃子,当即吃了一半,然后又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个,以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,就只剩一个桃子了。求第一天共摘多少个桃子?
思路:逆向思维,从最后一天剩的一个桃子找突破口。

  public class Peach {
     public static void main (String args[]){
         int x = 1;
         System.out.println("第10天有1桃子");
         for (int i=9;i>0;i--){
         x=(x+1)*2;
         System.out.println("第"+i+"天有"+x+"桃子");
       }
     }
 }

三、一个小于1000的正整数整数加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是?

public class Square {
    public static void main(String[] args) {
        for (int i = 1; i < 1000; i++) {
            if (Math.sqrt(i + 100)%1==0 &&Math.sqrt (i+100+168)%1==0) {//此处的对1取余为判断是否为整数,若是整数可证明开方成功,是两个一样的数字,即完全平方数
                System.out.println(i);
            }
        }
    }
}

四、小球从100米高度自由落下,每次落地后反跳回原高度的一半再落下,在第10次落地时共经过多少米?第10次反弹多高?

public class Jump {
     public static void main(String[] args) {
         float h = 100;//初始状态小球所处高度为100米
         float sum = 100;
         for (int i = 0; i < 10; i++) {
            h = h / 2;//每次反弹
            sum += 2 * h;
         }
         System.out.println("总共走过" + sum + "米," + "第十次弹起高度为" + h + "米");
       }
  }

五、(盛大游戏2018秋招)公司要开发一个业务管理系统,要求注册环节的密码需要提示用户其安全等级,密码按如下规则进行计分,并根据不同的得分为密码进行安全等级划分。
得分要求:
(1)密码长度
小于等于4 个字符——5分
5 到7 字符——10分
大于等于8 个字符——25分
(2)字母
没有字母——0分
全都是小(大)写字母——10分
大小写混合字母——20分
(3)数字
没有数字——0分
1 个数字——10分
大于1 个数字——20分
(4)符号
没有符号——-0分
1 个符号——10分
大于1 个符号——25分
(5)奖励
同时含有字母和数字——2分
同时含有字母、数字和符号——3分
同时含有大小写字母、数字和符号——5分
评分标准:
大于等于 90——非常安全VERY_SECURE
大于等于80——安全SECURE
大于等于70——非常强VERY_STRONG
大于等于 60——强STRONG
大于等于 50——一般AVERAGE
大于等于 25——弱WEAK
大于等于0——非常弱VERY_WEAK
测试:
样例输入:dgsayd$%12
样例输出:SECURE

import java.util.Scanner;

public class PasswordTest {
    //一、密码长度:
    //5 分: 小于等于4 个字符
    //10 分: 5 到7 字符
    //25 分: 大于等于8 个字符
    public int  testLength(String s){
        if(s.length()<=4){
            return 5;
        }
        else if(s.length()<=7){
            return 10;
        }
        else {
            return 25;
        }
    }
    
    //二、字母:
    //0 分: 没有字母
    //10 分: 全都是小(大)写字母
    //20 分: 大小写混合字母
    public int testLetter(String s) {
        int letterNumber = 0;
        int bigLetter = 0;
        int smallLetter = 0;
        char arr[]=s.toCharArray();
        for (int i = 0; i < s.length(); i++) {
            if (isLetter(arr[i])) {
                letterNumber++;
            }
            if (isBigLetter(arr[i])) {
                bigLetter++;
            }
            if (isSmallLetter(arr[i])) {
                smallLetter++;
            }
        }
        if(letterNumber==0){//不含字母
            return 0;
        }
        else if ((bigLetter == 0 &&smallLetter>0)||( smallLetter == 0&&bigLetter>0)) {//仅仅含有大写或小写字母
            return 10;
        } else if (bigLetter > 0 && smallLetter > 0 &&(bigLetter+smallLetter<=s.length())) {//同时含有大小写混合字母
            return 20;
        }
        else {
            return 0;
        }
    }
    private boolean isLetter(char n){
       if((n>='a'&&n<='z')||(n>='A'&&n<='Z')){
                return true;
            }
        return false;
    }
    private boolean isSmallLetter(char n){
        if(n>='a'&&n<='z'){
            return true;
        }
        return false;
    }
    private boolean isBigLetter(char n){
        if(n>='A'&&n<='Z'){
            return true;
        }
        return false;
    }
    //三、数字:
    //0 分: 没有数字
    //10 分: 1 个数字
    //20 分: 大于1 个数字
    public int testNumber(String s){
        int number=0;
        char arr[]=s.toCharArray();
        for(int i=0;i<arr.length;i++){
            if(isNumber(arr[i])){
                number++;
            }
        }
        if(number==0){
            return 0;
        }
        else if(number==1){
            return 10;
        }
        else {
            return 20;
        }
    }
    private boolean isNumber(char n){
        if(n>='0'&&n<='9'){
            return true;
        }
        return false;
    }

    //四、符号:
    //0 分: 没有符号
    //10 分: 1 个符号
    //25 分: 大于1 个符号
    public int testCharacter(String s) {
        char arr[] = s.toCharArray();
        int character = 0;
        for (int i = 0; i < arr.length; i++) {
            if ((!isLetter(arr[i])) && (!isNumber(arr[i]))) {
                character++;
            }
        }
        if (character == 1) {
            return 10;
        } else if (character > 1) {
            return 25;
        } else {
            return 0;
        }
    }

    //五、奖励:
    //2 分: 字母和数字
    //3 分: 字母、数字和符号
    //5 分: 大小写字母、数字和符号
    public int awardScore(String s) {
        if (testLetter(s) > 0 && testNumber(s) > 0) {//字母和数字得分都大于0表明同时含有字母和数字
            if (testCharacter(s) > 0) {//同时又含有符号
                if (testLetter(s) == 20) {//含有字母又是大小写混合
                    return 5;
                }
                return 3;
            }
            return 2;
        }
        else {
            return 0;
        }
    }
    
    //评分标准:
    //大于等于 90: 非常安全
    //大于等于80: 安全
    //大于等于70: 非常强
    //大于等于 60: 强
    //大于等于 50: 一般
    //大于等于 25: 弱
    //大于等于0:  非常弱
    public void showLevel(String s){
        int score=testLength(s)+testNumber(s)+testLetter(s)+testCharacter(s)+awardScore(s);
//        System.out.println(score);
//        System.out.println("长度得分"+testLength(s));
//        System.out.println("字母得分"+testLetter(s));
//        System.out.println("数字得分"+testNumber(s));
//        System.out.println("符号得分"+testCharacter(s));
//        System.out.println("奖励得分"+awardScore(s));
        if(score>=90){
            System.out.println("VERY SECURE!");
        }
        else if(score>=80){
            System.out.println("SECURE!");
        }
        else if(score>=70){
            System.out.println("VERY STRONG!");
        }
        else if(score>=60){
            System.out.println("STRONG!");
        }
        else if(score>=50){
            System.out.println("AVERAGE!");
        }
        else if(score>=25){
            System.out.println("WEAK!");
        }
        else if(score>=0){
            System.out.println("VERY WEAK!");
        }
    }
    
    //测试
    public static void main(String[] args) {
        PasswordTest test=new PasswordTest();
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入密码:");
        String s=scanner.nextLine();
        //dgsayd$%12 输出 SECURE
        //3+25+10+25+20=83
        test.showLevel(s);
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值