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 + "\t");
				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 + "\t");
						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");
		}
	
	}
}

猜你喜欢

转载自www.cnblogs.com/raising/p/12741434.html
今日推荐