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