• 0420周六日作业复盘


    0420周六日作业复盘

    1.学习心得

    1.变量命名:还是存在使用拼音命名的现象,需要杜绝:实在找不到英文单词,就采用意思相近的,在注释里面解释清楚
    
    2.变量的取值范围未考虑
    
    3.程序的优化:算数问题先确认好基本的数学解题思路可能会更好一点,算法上可能会少一些步骤
    

    2.立方:数据类型未考虑

    /*
    1. 表达式(立方)	
    		编写程序,计算用户输入数据的【立方】
    		数据类型的选择
    			1. 数据当前的情况
    			2. 数据的延展性,后期的计算效果
    			
    		用户输入的数据可以用int类型变量来保存
    		计算结果是一个立方效果,立方之后数据量的
    		增长性是非常恐怖的,所以现在double保存结果
    */
    
    //老师方案
    import java.util.Scanner;
    
    class HomeWork1 {
    	public static void main(String[] args) {
    		int num = 0;
    		Scanner sc = new Scanner(System.in);
    		
    		System.out.println("请输入一个整数:");
    		num = sc.nextInt();
    		
    		double ret = num * num * num;
    		
    		System.out.println("ret : " + ret);
    	}
    }
    
    //个人方案
    //【1.未考虑数据类型范围】
    //【2.未给予用户输入提示】
    import java.util.Scanner;
    class HomeWork1{
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		int n = sc.nextInt();
    		System.out.println(n * n * n);
    	}
    }
    
    

    3.取值操作

    /*
    2. 表达式(取值操作)	
            输入4个数,若第一个数第二个数相等,第三个数和第四个数的
            和与第一个数和第二个数的和相等,输出1,否则输出0
    		
    		1. Scanner可以获取多个数据
    		2. 条件判断叠加
    		3. if else
    */
    
    //老师方案
    import java.util.Scanner;
    
    class HomeWork2 {
    	public static void main(String[] args) {
    		int num1 = 0;
    		int num2 = 0;
    		int num3 = 0;
    		int num4 = 0;
    		Scanner sc = new Scanner(System.in);
    		
    		System.out.println("请输入4个整数:");
    		num1 = sc.nextInt();
    		num2 = sc.nextInt();
    		num3 = sc.nextInt();
    		num4 = sc.nextInt();
    		
    		if (num1 == num2 && (num1 + num2) == (num3 + num4)) {
    			System.out.println(1);
    		} else {
    			System.out.println(0);
    		}
    	}
    }
    
    
    
    //个人方案
    //【条件判断处的条件可以合并优化】
    import java.util.Scanner;
    class HomeWork2{
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		int a = sc.nextInt();
    		int b = sc.nextInt();
    		int c = sc.nextInt();
    		int d = sc.nextInt();
    		
    		if ( a == b) {
    			if ((a + b) == (c + d)) {
    				System.out.println("1");
    			} else {
    				System.out.println("0");
    			}
    			
    		} else {
    			System.out.println("0");
    		}
    	}
    }
    

    4.质因分解

    /*
    7. 将一个正整数进行分解质因数操作 例如: 输入90 结果 2*3*3*5
    	质因数 有且被1 和 本身整除
    	2 3 5 7 11 13 17 19 23
    	
    	90 ==> 2 * 3 * 3 * 5
    	15 ==> 3 * 5
    	120 == > 2 * 2 * 2 * 3 * 5
    	
    	【问题】终止条件在哪里?
    		1. 循环变量 == 被操作数
    		2. 被操作数 ==> 1
    	
    	120 ÷ 2 
    		==> 60 ÷ 2
    		==> 30 ÷ 2
    		==> 15 ÷ 2错 2 += 1 ==> 3
    		==> 15 ÷ 3 
    		==> 5 ÷ 3 错 3 += 1 ==> 4
    		==> 5 ÷ 4 错 4 += 1 ==> 5
    		==> 
    	
    	解出一个数字之后,需要再将循环变量保持原样 继续操作
    */
    
    //老师方案
    class HomeWork7 {
    	public static void main(String[] args) {
    		// 分解质因数从2开始
    		int i = 2;
    		int num = 23;
    		
    		// 要求i值小于等于num,继续循环
    		while (i <= num) {
    			if (num % i == 0) {
    				System.out.println("i : " + i);
    				num /= i;
    				
    				i -= 1;
    			}
    			
    			i += 1;
    		}
    	}
    }
    
    //个人方案 
    //【还是算法上不够好,能算出来,但是太麻烦】
    import java.util.Scanner;
    class HomeWork7{
    	public static void main(String[] args) {
    		
    		int num = 0;
    		boolean flag = true;//标记可分解数字的最小质因数能否分解
    		boolean primeNumber = true;//标记该数字能否分解
    		
    		Scanner sc = new Scanner(System.in);
    		System.out.println("请输入一个整数:");
    		num = sc.nextInt();
    		System.out.println("您输入的整数为: "+ num);
    		
    		
    		
    		for (int i = 2;i < num/2;i++ ) {
    			if (num % i == 0) {
    				primeNumber = false;
    				System.out.print(i + "	");
    				num = num / i;
    				i = 1;
    				flag = true;
    				
    				/*可分解的数打印展示出来,另一个数继续参与判断确认能否继续分解*/
    				for (int j = 2;j < num/2;j++){
    					if(num % j == 0) {
    						flag = false;
    						break;
    					}
    					
    				}	
    					if (flag){
    						System.out.print(num + "	");
    						System.out.println();
    					}
    			}	
    			 
    		}
    		 
    		/*如果primeNumber为true,则说明该数字为质数*/
    		if (primeNumber){
    			System.out.print("该数的质因数只有:" + num);
    					
    		}
    	}
    }
    

    5.斐波那契数列

    //【该问题是未考虑数据类型取值问题】
    
    /*
    8. 使用循环完成30位以内的斐波那契数列
    		1 1 2 3 5 8 13 21...
    		斐波那契数列 前两位固定 1 1 
    		之后的每一个数都是前两数之和
    		
    	num1 = 1;
    	num2 = 1;
    	
    	==> num1 = 1; num2 = 2;
    	==> num1 = 2; num2 = 3;
    	
    	1. 把num2的值赋值给num1,这里需要保留num1数据,为后期相加使用
    	2. num1 + num2 ==> num2;
    	
    	数据类型考虑使用double类型,保证数据的延展性,斐波那契数列使用情况下,数据的增长性是非常恐怖的,使用double可以保证数据后期的展示真实性。
    	
    */
    class HomeWork8 {
    	public static void main(String[] args) {
    		double num1 = 1;
    		double num2 = 1;
    		int count = 1;
    		
    		System.out.print("1 1 ");
    		
    		while (count <= 48) {
    			double temp = num1;
    			num1 = num2;
    			num2 += temp;
    			
    			System.out.print(num2 + " ");
    			count += 1;
    		}
    	}
    }
    

    6.水仙花数

    //【数字各个位置上的取值问题】
    
    
    /*
    10. 判断一个三位数是否是水仙花数,如果是,输出YES,如果不是,输出NO
    	说明: 水仙花就是一个数的每个数字的立方和等于它本身的数, 例如 153就是一个水仙
    	花数 1*1*1+5*5*5+3*3*3=153
    */
    import java.util.Scanner;
    
    class HomeWork10 {
    	public static void main(String[] args) {
    		int num = 0;
    		Scanner sc = new Scanner(System.in);
    		
    		System.out.println("请输入一个100 ~ 999之间的数据:");
    		num = sc.nextInt();
    		
    		if (num < 100 || num > 999) {
    			System.out.println("输入错误");
    			System.exit(0);
    		}
    		
    		int ones = num % 10;
    		int tens = num / 10 % 10; 
            /*
            112 / 10 ==> 11
            11 % 10 ==> 1
            
            162 / 10 ==> 16
            16 % 10 ==> 6
            */
    		int units = num / 100;
    		
    		int ret = ones * ones * ones 
    		+ tens * tens * tens 
    		+ units * units *units;
    		
    		if (ret == num) {
    			System.out.println(ret + " Yes");
    		} else {
    			System.out.println("No");
    		}
    	
    	}
    }
    
  • 相关阅读:
    三路快排
    双路快排
    随机快排
    快速排序
    双向链表
    单向链表
    堆排序
    二分插入、bisect
    jmockit使用总结-MockUp重点介绍
    java拼接字符串、格式化字符串方式
  • 原文地址:https://www.cnblogs.com/raising/p/12741434.html
Copyright © 2020-2023  润新知