java刷题-day1

今天是刚开始使用java刷题的第一天!以后我也会一直坚持分享每天刷的题目以及解题思路!~

第一题:猴子吃桃问题:

猴子吃桃问题。猴子第一天摘下若干个桃子,当时就吃了一半,还不过瘾,就又吃了一个。第二天又将剩下的桃 子吃掉一半,又多吃了一个。以后每天都吃前一天剩下的一半零一个。到第 10 天在想吃的时候就剩一个桃子了,求 第一天共摘下来多少个桃子?

先看一下我的递推思路:

然后直接拿上公式去写

java 复制代码
import java.util.Scanner;

public class day1 {
    //猴子吃桃问题。猴子第一天摘下若干个桃子,当时就吃了一半,还不过瘾,就又吃了一个。第二天又将剩下的桃
    //子吃掉一半,又多吃了一个。以后每天都吃前一天剩下的一半零一个。到第 10 天在想吃的时候就剩一个桃子了,求
    //第一天共摘下来多少个桃子?
    public static void main(String[] args) {
        int num = 1; // 第10天剩下1个桃子

        // 从第9天逆推到第1天
        for (int i = 9; i >= 1; i--) {
            num = (num + 1) * 2;
            System.out.println("第" + i + "天有 " + num + " 个桃子");
        }

        System.out.println("第一天共摘下来 " + num + " 个桃子");
    }
}

第二题:转化字符串

输入一个字符,判断它是否为小写字母,如果是,将它转换成大写字母,否则,不转换

这里我采用StringBuilder拼接的方法

java 复制代码
import java.util.Scanner;
public class day1 {
    public static void main(String[] args) {
        //输入一个字符,判断它是否为小写字母,如果是,将它转换成大写字母,否则,不转换
        Scanner scanner = new Scanner(System.in);
        String str = scanner.nextLine();

        StringBuilder res = new StringBuilder();//使用拼接方法一个一个来
        for (int i = 0; i < str.length(); i++) {
            //获取每一位判断是否是小写
            char ch = str.charAt(i);
            if (Character.isLowerCase(ch)){
                //是小写就转换为大写
                res.append(Character.toUpperCase(ch));
            }else{
                res.append(ch);//否则不改变
            }
        }
        System.out.println(res.toString());
    }
}

第三题:输入日期判断天数

编写程序,对输入的年、月、日,给出该天是该年的第多少天? 例如:2022年1月15日,是该年的第15天

这里我采用的是数组累加的方式,把每一月的天数存进去,然后额外判断一下闰年。

计算方式:先算输入月份的前几个月的天数,因为那几月是完全过了的,比如我说八月7号,那肯定说明1-7月都过完了,还剩8月的7天,也就是说最后再加上我们输入的天数就可以了

java 复制代码
import java.util.Scanner;
public class day1 {
    //编写程序,对输入的年、月、日,给出该天是该年的第多少天?
    //例如:2022年1月15日,是该年的第15天
    public static void isDays(int year,int month,int day) {
        int[] d = {31,28,31,30,31,30,31,31,30,31,30,31};
        if(year%4==0&&year%100!=0||year%400==0){
            d[1]=29;
        }
        int sum_day=0;
        //前几个月单独计算,然后再加上输入的多少号就可以了
        for (int i = 0; i < month-1; i++) {
            sum_day+=d[i];
        }
        sum_day+=day;
        System.out.println(+year+"年"+month+"月"+day+"日是该年的第"+sum_day+"天");
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入年数");
        int year = sc.nextInt();
        System.out.println("请输入月份");
        int month = sc.nextInt();
        System.out.println("请输入天数");
        int day = sc.nextInt();
        isDays(year,month,day);
    }
}

第四题:10000内的完数

编程求 1~10000 之间的所有"完全数",完全数是该数的所有因子之和等于该数的数。例如,6 的因子有 1、2、 3,且 6=1+2+3,所以 6 是完全数。

java 复制代码
public class day1 {
    //求 1~10000 之间的所有"完全数",完全数是该数的所有因子之和等于该数的数。
    // 例如,6 的因子有 1、2、3,且 6=1+2+3,所以 6 是完全数。
    public static boolean perfectNumber(int num ){
        if (num<2) {
            return false;
        }
        // 找出所有能整除num的数(因子)
        int sum=0;
        for (int i = 1; i < num; i++) {
            if(num % i == 0){
                sum += i;
            }
        }
        return sum==num;//返回满足因子之和等于这个数也就是完数
    }

        public static void main3(String[] args) {
            for (int i = 0; i <= 10000; i++) {
                if(perfectNumber(i)){
                    System.out.println(i);
                }
            }
    }
}

以上是今天分享的四个题目,点点关注天天更新~

相关推荐
A242073493019 小时前
JavaScript图表制作:从入门到精通
开发语言·javascript·信息可视化
BD_Marathon19 小时前
Vue3_简介和快速体验
开发语言·javascript·ecmascript
摇滚侠19 小时前
面试实战 问题三十四 对称加密 和 非对称加密 spring 拦截器 spring 过滤器
java·spring·面试
xqqxqxxq19 小时前
Java 集合框架之线性表(List)实现技术笔记
java·笔记·python
L0CK20 小时前
RESTful风格解析
java
程序员小假20 小时前
我们来说说 ThreadLocal 的原理,使用场景及内存泄漏问题
java·后端
何中应20 小时前
LinkedHashMap使用
java·后端·缓存
tryxr20 小时前
Java 多线程标志位的使用
java·开发语言·volatile·内存可见性·标志位
talenteddriver20 小时前
java: Java8以后hashmap扩容后根据高位确定元素新位置
java·算法·哈希算法
云泽80820 小时前
STL容器性能探秘:stack、queue、deque的实现与CPU缓存命中率优化
java·c++·缓存