记:
差不多有二十多天了,暂时没有遇到太多超出自己承受范围之外的东
西,其实感觉还不错,常常会有一种回到了高中做数学题的时候的错
觉。
但在文科太久了,突然到了男生群聚的地方,总会有一种不适应感。
以下正题,practice10是将从控制台获取的数据进行重组,我暂时没
能做出来,留待日后解决,这里说明。
package lianxi;
import java.util.Scanner;
/**
* @author 一条子非鱼的沫
* @see 循环结构练习
*/
public class lianxi01 {
public static void main(String[] args) {
// 【运行方法】将此条内容以下需要运行的自定义方法取消注释后即可运行。
//ps:由于Scanner指向不明的问题,每一个practice只能单独运行
practice01();// 回文数
// practice02();// 兔子问题
// practice03();// 判断素数
// practice04();// 水仙花数
// practice05();// 公约数与公倍数
// practice06();// 九九乘法表
// practice07();// 猴子问题
// practice08();// 求位数并打印
// practice09();// 打印菱形
// practice10();// 重组数字
}
/**
* practice01:【回文数】
*
* @see 一个五位数,判断一个它是不是回文数
* @see 回文数即以中间位置的数为中心,呈左右对称的数。例如:15251
*/
public static void practice01() {
Scanner input = new Scanner(System.in);
int number;
do {
System.out.print("请输入一个五位数:");
number = input.nextInt();// 输入一个int类型的五位数
} while (number < 10000 || number > 99999);
String str = String.valueOf(number);// 把number的值转化为string类型
char[] ch = str.toCharArray();// 将string类型的数组转换为char型的数组
if (ch[0] == ch[4] && ch[1] == ch[3]) {// 如果第一个数与第五个数、第二个数与第四个数相等
System.out.println("这个数是回文数");
} else {
System.out.println("这个数不是回文数");
}
input.close();
}
/**
* practice02:【兔子问题】
*
* @see 有一对兔子,从出生后第三个月起,每个月都生一对兔子,
* @see 小兔子长到第三个月后,每个月又生一对兔子,
* @see 假如兔子都不死,问每个月的兔子总数为多少?
*/
public static void practice02() {
Scanner input = new Scanner(System.in);
System.out.print("请输入周数(大于2):\t");
int month = input.nextInt();
System.out.println("第1个月兔子的对数为:\t1");
System.out.println("第2个月兔子的对数为:\t1");
int f1 = 1;// 上上个月兔子总数
int f2 = 1;// 上个月兔子总数
int f0;// 用于中转使用的量
int i = 3;
int sum = 0;
for (; i <= month; i++) {
f0 = f1;
f1 = f1 + f2;// 新一个月兔子总数为上个月兔子总数加上上个月兔子的总数
f2 = f0;
sum += f1;
System.out.println("第" + i + "个月兔子的对数为:\t" + f1);
}
System.out.println("截止第" + (i - 1) + "个月,兔子对数总和为:\t" + sum);
input.close();
}
/**
* practice03:【判断素数】
*
* @see 及合数的质因数: 从控制台输入一个数,判断它是不是素数,
* @see 如果是,输出这个数; 如果不是,分解出这个数的所有质因数。
*/
public static void practice03() {
Scanner input = new Scanner(System.in);
System.out.print("请输入一个正整数:");
int number = input.nextInt();
int i = 2;// i表示输入数字的质因数的初始化
System.out.print(number + "=");
while (i <= number) {// 分解出的质因数一定小于等于原数
if (i == number) {// 如果用于验证的质因数等于原数,则代表着这个原数本身就是质数
System.out.print(number);// 输出原数,即为它本身唯一的质因数
break;// 已经分解出所有情况,跳出循环体
} else if (number % i == 0) {// 如果原数能够被用于验证的质因数整除,则输出这个质因数
System.out.print(i + "*");
number /= i;// 原数除以验证过的质因数后,将得出的商赋值给原数,进行下一次验证
} else {
i++;// 如果原数不能被用于验证的质因数整除,则使用新的用于验证的质因数后再次执行上一步
}
}
input.close();
}
/**
* practice04:【水仙花数】
*
* @see 打印出所有水仙花数。
* @see 水仙花数,即一个各位数字的立方和等于这个数字本身的三位数。如:135=(1*1*1)+(3*3*3)+(5*5*5);
*/
public static void practice04() {
System.out.print("所有水仙花数有:");
for (int i = 100; i < 1000; i++) {
int a = i % 10;// a表示i的个位数
int b = i / 10 % 10;// b表示i的十位数
int c = i / 100;// c表示i的百位数
if (a * a * a + b * b * b + c * c * c == i) {// 如果立方和等于原数
System.out.print(i + " ");
}
}
}
/**
* practice05:【公约数与公倍数】
*
* @see 从控制台输入两个大小不同的数
* @see 求它们的最大公约数与最小公倍数
*/
public static void practice05() {
Scanner input = new Scanner(System.in);
System.out.print("请输入正整数一:");
int m = input.nextInt();
System.out.print("请输入正整数二:");
int n = input.nextInt();
int max = 0, min = 0;// 定义一个较大值和较小值,对所输入的数字进行大小比较
if (m == n || m < 2 || n < 2) {// 如果输入的两个数字相等,或者它们出现小于2的数
System.out.print("输入错误,请重新输入");// 则提示用户重新输入
// 另外,排除不符合的情况后,再比较两个输入数字的大小,分别把它们赋值给较大值和较小值
} else if (m > n) {
max = m;
min = n;
} else {
max = n;
min = m;
}
System.out.print("它们之间的最大公约数为:");
for (int i = min; i >= 2; i--) {// 从较小值向2
if (min % i == 0 && max % i == 0) {// 如果两个数除以同一个i都没有余数,i就是它们的公约数
System.out.print(i + " ");
break;// 由于i的值是从大向小进行运算,所以得出的第一个i的值几位它们的最大公约数
}
}
System.out.print("它们之间的最小公倍数为:");
for (int i = max; i <= max * min; i++) {// 从较大值向两个值的乘积
if (i % min == 0 && i % max == 0) {// 如果同一个i分别除以这两个数都没有余数,i就是它们的公倍数
System.out.print(i + " ");
break;// 由于i的值是从较大值向两个值的乘积进行运算,所以得出的第一个i的值即为它们的最小公倍数
}
}
input.close();
}
/**
* practice06:【九九乘法表】
*
* @see 制作一个九九乘法表
*/
public static void practice06() {
for (int i = 1; i < 10; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(j + "*" + i + "=" + i * j + "\t");
}
System.out.println();
}
}
/**
* practice07:【猴子问题】
*
* @see 猴子第一天摘下若干桃子,当即吃了一半,吃完觉得不过瘾,又吃了一个
* @see 第二天,猴子吃了剩下桃子的一半,吃完觉得不过瘾,又吃了一个
* @see 以后每天都吃了剩下的一半,吃完觉得不过瘾,又吃了一个
* @see 到第10天时,猴子想再吃时,发现桃子只剩下一个了
* @see 问:第一天猴子摘了多少个桃子?
*/
public static void practice07() {
int peach = 1;// peach表示桃子,初始值为1,表示第十天剩下1个桃子
for (int i = 10; i >= 1; i--) {// 从第十天开始向第一天回算
peach = peach * 2 + 2;// 前一天的桃子数目是后一天的二倍加二个
}
System.out.println("第1天总共摘了" + peach + "个桃子");
}
/**
* practice08:【求位数并打印】
*
* @see 从控制台输入一个整数,请获取它的位数,并逆序打印各位上的数字
*/
public static void practice08() {
Scanner input = new Scanner(System.in);
System.out.print("请输入一个整数:");
long number = input.nextLong();// 定义数据类型为长整型
int digit = 1;// 定义这个数的位数,初始为1位
System.out.print("这个数各位逆序打印为:");
System.out.print(number % 10 + " ");// 取出这个数的个位数
while (number / 10 != 0) {// 如果这个数的位数大于等于两位
number /= 10;// 将这个数逐渐除以10,得出的余数即依次为:十、百、千……
System.out.print(number % 10 + " ");
digit++;// 此时该数的位数也相应第增加1
}
System.out.print("\n这个数的位数为:" + digit);
input.close();
}
/**
* practice09:【打印菱形】
*
* @see 使用循环结构打印出一个菱形,菱形的元素为“*”号;
*/
public static void practice09() {
Scanner input = new Scanner(System.in);
System.out.print("请输入菱形的边长:\t");
int side = input.nextInt();
System.out.println("菱形的打印图如下:");
for (int i = 1; i <= side; i++) {// 进行上半部分,包括*号最多的一行在内
for (int j = 1; j <= side * 2 - i * 2; j++) {// 每一行空格个数为:side*2-i*2
System.out.print(" ");
}
for (int j = 1; j <= i * 2 - 1; j++) {// 每一行*号个数为:i*2-1
System.out.print("* ");// 输出时*号与*号间有空格,所以整个程序乘以2进行运算
}
System.out.println();// 输出每一行的空格和*号之后要进行换行
}
for (int i = 1; i <= side - 1; i++) {// 进行下半部分,不包括*号最多的一行在内
for (int j = 1; j <= i * 2; j++) {// 每一行的空格数为:i*2
System.out.print(" ");
}
for (int j = 1; j <= side * 2 - i * 2 - 1; j++) {
// 每一行*号个数为:side*2-i*2-1
System.out.print("* ");// 输出时*号与*号间有空格,所以整个程序乘以2进行运算
}
System.out.println();// 输出每一行的空格和*号之后要进行换行
}
input.close();
}
/**
* practice10:【重组数字】
*
* @see 有四个各不相同的非零数字,用它们重组成各不相同的三位数,能够组成多少个?
*/
public static void practice10() {// 【未完成】
Scanner input = new Scanner(System.in);
System.out.print("请输入第1个数字:");
int a = input.nextInt();
System.out.print("请输入第2个数字:");
int b = input.nextInt();
System.out.print("请输入第3个数字:");
int c = input.nextInt();
System.out.print("请输入第4个数字:");
int d = input.nextInt();
if (a == 0 || b == 0 || c == 0 || d == 0 || a > 9 || b > 9 || c > 9 || d > 9 || a == b || b == c || c == d
|| a == c || b == d) {
System.out.print("你所输入的数字有误!");
System.exit(0);
}
input.close();
}
}
以下为程序输出效果截图:
ps. practice10由于没做出来,所以没有截图。
1、目录截图
2、practice01
3、practice02
4、practice03
5、practice04
6、practice05
7、practice06
8、practice07
9、practice08
10、practice10