第3章 Java 主方法中的循环结构

前言

嘿,同学,你今天学习了吗?
你还在为了那些所谓的工作在忙碌吗?或者,沉迷在游戏的世界里面呢,总不能一直这样下去吧。
有时候呀,打开网易云音乐,然后在这里水水文章,刷刷题,也是一件很快乐的事情哦!冲冲冲

第一关:水仙花数

  • 水仙花数特征:
  • 该值处于 100(包括)到 999(包括)之间;
  • 其个位数的三次幂,十位数的三次幂,百位数的三次幂的和等于这个数本身。
public class Test1 {
	public static void main(String[] args) {
		for(int i=999;i>=100;i--) {
			int a = i%10;
			int b = i/10%10;
			int c = i/100;
			if(Math.pow(a, 3)+Math.pow(b, 3)+Math.pow(c, 3)==i) {
				System.out.println(i + "是一个水仙花数。");
			}
		}
	}
}
  • 循环来了,虽然都是基础题,但是也是很重要哦,这些基础题可能不会对你在技术上有很大的提升,但是,在细节上,绝对能让你变得超级细,啊哈哈哈哈哈哈哈。

第二关:完数

  • 完数的定义:一个数如果恰好等于它的因子之和(本身除外),这个数就称为完数。例如数字 6,其因子为 1,2,3,6(本身除外),满足1+2+3=6,所以 6 是完数。
import java.util.Scanner;
public class Test2 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int x = input.nextInt();
        int s=0;
        for(int i=1;i<=x/2;i++) {
        	if(x%i==0)s+=i;
        }
        if(s==x)System.out.println(x + "是完数");
        else System.out.println(x + "不是完数");
    }
}
  • emmmm,循环满,肯定又是各种数的,以前学c的也是,啊哈哈哈哈哈哈哈。

第三关:素数

  • 素数的定义:在大于 1 的自然数中,除了 1 和它本身以外不再有其他因数的自然数。
import java.util.Scanner;
public class Test3 {
	public static void main(String[] args) {
		
		Scanner reader = new Scanner(System.in);
		int x = reader.nextInt();
		int i;
		int flag = 1 ;
		for(i=2;i*i<=x;i++) {
			if(x%i==0) {
				System.out.println(x + "不是一个素数");
				flag = 0;
				break;	
			}
		}
		if(flag==1) {
			System.out.println(x + "是一个素数");
		}
	}
}
  • 看吧,我就说有好多啥数的,嘿嘿。

第四关:求奇数

  • 本关任务:给定一个正整数 n,统计比 n 小的正奇数的个数。
import java.util.Scanner;
public class Test4 {
    public static void main(String[] args) {
        
        int count = 0;
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        for(int i=1;i<n;i++) {
        	if(i%2==1) {
        		count++;
        	}
        }
        System.out.print(n + "前面共有" + count + "个奇数。");	
    }
}
  • 害,好想快点到对象那一章节。

第五关:淡水湖排名

  • 本关任务:我国有 4 大淡水湖,分别是洞庭湖,洪泽湖,鄱阳湖和太湖。
  • A 说:洞庭湖最大,洪泽湖最小,鄱阳湖第三;
  • B 说:洪泽湖最大,洞庭湖最小,鄱阳湖第二,太湖第三;
  • C 说:洪泽湖最小,洞庭湖第三;
  • D 说:鄱阳湖最大,太湖最小,洪泽湖第二,洞庭湖第三。
  • 请根据每人说的话求出 4 大湖的正确排名。当然哈,他们每个人只说对了一个。
  • 那个网站都没这个条件,看了我半天,好气哦!

public class Test5 {
    public static void main(String[] args) {
        int a, b, c, d;   // 定义4个人说的话
        int dongting, hongze, poyang, tai;  // 定义4个湖
        for(dongting=1;dongting<5;dongting++) {
        	
        	for(hongze=1;hongze<5;hongze++) {
        		
            	if(dongting==hongze)continue;
            	for(poyang=1;poyang<5;poyang++) {
            		
            		if(poyang==dongting||poyang==hongze)continue;	
            		tai = 10 - dongting - hongze - poyang;				//因为1+2+3+4=10 哦!
            		
            		a = (dongting==1?1:0)+(hongze==4?1:0)+(poyang==3?1:0);
            		b = (dongting==4?1:0)+(hongze==1?1:0)+(poyang==2?1:0)+(tai==3?1:0);
            		c = (dongting==3?1:0)+(hongze==4?1:0);
            		d = (dongting==3?1:0)+(hongze==2?1:0)+(poyang==1?1:0)+(tai==4?1:0);
            		
            		if((a==1)&&(b==1)&&(c==1)&&(d==1)) {
            			System.out.println("洞庭湖排名:" + dongting);
            			System.out.println("洪泽湖排名:" + hongze);
            			System.out.println("鄱阳湖排名:" + poyang);
            			System.out.println("太湖排名:" + tai);
            		}
            	}
            }
        }  
    }
}

第七关:房贷款还款计算

  • 本关任务:编写一个程序,由用户输入住房贷款和贷款年限,程序输出不同利率下的月还款额和总还款额,利率从 5%~8%,增长间隔为 1/8。例如,如果输入贷款额 10000 元人民币,贷款期限 5 年。
import java.util.Scanner;
public class Test7 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        // 接收贷款额
        int loan=input.nextInt();
        // 接收贷款年限
        int year=input.nextInt();
        // 第一步:定义变量月还款额,并赋初值0
        double monthlyPay=0;
        // 第二步:定义变量总还款额,并赋初值0
        double totalPay=0;
        // 第三步:输出贷款额
        System.out.println("贷款额:"+loan);
        // 第四步:输出贷款年限
        System.out.println("贷款年限:"+year);
        // 第五步:输出利率、月还款率以及总还款率
        System.out.println("利率"+"    "+"月还款额"+"    "+"总还款额");
        for (double i=5;i<=8;i+=0.125)
        {
            // 月利率
            double a=i/1200;
            // 月还款额
            monthlyPay=loan*a*Math.pow(1+a,12*year)/(Math.pow(1+a,12*year)-1);
            // 总还款额
            totalPay=12*monthlyPay*year;
            // 格式化输出
            System.out.printf("%.3f%%\t%.2f\t%.2f\n",i,monthlyPay,totalPay);
        }
    }
}
  • 套公式套公式,害。有时候菜起来,公式都套不会,呜呜呜

第八关:杨辉三角

  • 本关任务:给定一个正整数 n,打印出有 n 行的杨辉三角形。
import java.util.Scanner;
public class Test8 {
	public static void main(String[] args) {

		Scanner input = new Scanner(System.in);
	    System.out.println("请输入要求打印的行数:");
	    int n = input.nextInt();
	    
	    for(int i=0;i<n;i++){
	    	
	    	int number = 1;
	        System.out.printf("%"+(n-i)*2+"s","");            //还能这样写是我没想到的,啊哈哈哈哈哈哈哈    
	        
	        for(int j=0;j<=i;j++){
	
	        	System.out.format("%4d",number); 
	            number = number * (i - j) / (j + 1);
	        }
	        System.out.println();
	    }
	}
}
  • Java还是香 的,这样的写法原来也可以了,学到了。啊哈哈哈哈哈哈哈

第九关:日历打印

  • 本关任务:接收一个年份数和一个月份数,打印出该月的日历。
import java.util.Scanner;
public class Test9 {
    // 定义主方法 main,在该方法中完成本关任务
    public static void main(String[] args) {
        int year = 0;// 用来保存输入的年份
        int month = 0;// 用来保存输入的月份
        Scanner in = new Scanner(System.in);
        year = in.nextInt();// 获取输入的年份
          if(year<1900){
            System.out.print("请输入大于或等于1900的年份");
            System.exit(0);
        }
        month = in.nextInt();// 获取输入的月份
         if(month>12|| month<1){
            System.out.print("请输入正确的月份");
            System.exit(0);
        }
        in.close();
         int date = 0; // 存放每月1号是星期几星期
         int day_max = 0;// 存放月的天数
         int day_sum = 0;
        // 累加从1900年到接收的年份之间的天数
        for (int i = 1900; i < year; i++) {
            // 判断是否是闰年
            if (i % 400 == 0 || (i % 4 == 0 && i % 100 != 0)) {
                // 闰年366天
                day_sum += 366;
            } else {
                // 平年365天
                day_sum += 365;
            }
        } 
        // 对月份进行累加计算
        for (int i = 1; i < month; i++) {
            switch (i) {
                case 1:
                case 3:
                case 5:
                case 7:
                case 8:
                case 10:
                case 12:
                    day_max = 31;
                    day_sum += 31;
                    break;
                case 2:
                    // 判断是否是闰年
                    if (year % 400 == 0 || (year % 4 == 0 && (year % 100 != 0))) {
                        // 闰年2月29
                        day_sum += 29;
                    } else {
                        // 平年2月28
                        day_sum += 28;
                    }
                    break;
                default:
                    day_sum += 30;
                    break;
            }
        } 
        date = 1 + day_sum % 7; // 存放输入的日期计算得到的星期,1900年1月1日星期一
        // 如果是星期日,开头则 不用空出来距离
        // 此处之后date变量表示这月1号前面制表符的个数
        if (date == 7) {
            date = 0;
        }
        // 判断这个月份多少天
        switch (month) {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                day_max = 31;
                break;
            case 2:
                // 判断是否是闰年
                if (year % 400 == 0 || (year % 4 == 0 && (year % 100 != 0))) {
                    // 闰年2月29
                    day_max = 29;
                } else {
                    // 平年2月28
                    day_max = 28;
                }
                break;
            default:
                day_max = 30;
                break;
        }
        System.out.println("==================================================");
        // 输出表头
        System.out.print("日\t一\t二\t三\t四\t五\t六\n");
        int day = 1;// 打印的天数
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 7; j++) {
                // 打印第一行的时候,空出前date个空间
                if (i == 0 && j < date) {
                    System.out.print("\t");
                    // 跳出当前次循环
                    continue;
                }
                if (day > day_max) {
                    break;
                }
                System.out.print(day + "\t");
                day++;
            }
            // 打印完一行后换行
            System.out.println();
        }
        System.out.println("==================================================");
    }
}
  • 心态炸了,他们家服务器是真的垃圾,运行几次就超时,害,明天见。
  • 11
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木木不会

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值