7、打印出所有的水仙花数
做这一道题,首先得知道水仙花数是什么?水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身
那知道了水仙花数直接把它拆分,分为百位、十位、个位,分别求出输入数据的各个位数的数据即可,直接把条件自身i==百位数的三次方+十位数的三次方+个位数的三次方,进行判断就能输出
package com.yan3;
public class Test10 {
public static void main(String[] args) {
// 9、打印出所有的水仙花数
// for (int i = 100; i < 1000; i++) {
// int bai = i / 100;
// int shi = i / 10 % 10;
// int ge = i % 10;
// if (i == Math.pow(bai, 3) + Math.pow(shi, 3) + Math.pow(ge, 3))
// System.out.println("水仙花数为" + i);
// }
int i = 100;
while (++i < 1000) {
int a = i / 100;
int b = i / 10 % 10;
int c = i % 10;
if (i == Math.pow(a, 3) + Math.pow(b, 3) + Math.pow(c, 3))
System.out.println("水仙花数为" + i);
}
}
}
8、判断一个数是否为质数(附加题:编程求出101到205中的所有质数)
首先用Scanner录入数据,用布尔类型进行true和false的判断,直接把false赋给输入数据对k求余为0的input,然后break;结束本次循环;根据判断结果输出提示信息即可
求一个范围内的质数,直接for循环把范围一定义,判断是质数的数据直接输出即可
package com.yan3;
import java.util.Scanner;
public class Test11 {
public static void main(String[] args) {
// 10、判断一个数是否质数
// 质数是指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数
// 质数还有一个特点,就是它总是等于 6x-1 或者 6x+1,其中 x 是大于等于1的自然数。
// 键盘录入一个整数
int input = 0;
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个大于1的自然数:");
while (true) {
input = sc.nextInt();
if (input <= 1)
System.out.println("输入的数据不合法");
else {
break;
}
}
// 判断是否有>=2并且<自身的因数
boolean zhiShu = true;
for (int k = 2; k < input; k++) {
if (input % k == 0) {
zhiShu = false;
break;
}
}
// 根据判断结果输出提示信息
if (zhiShu)
System.out.println(input + "是质数");
else
System.out.println(input + "不是质数");
}
}
package com.yan3;
public class Test12 {
public static void main(String[] args) {
// 11、编程求出自然数101-205中的所有质数
int count = 0;
for (int k = 101; k <= 205; k++) {
boolean zhiShu = true;
for (int j = 2; j < k; j++) {
if (k % j == 0) {
zhiShu = false;
break;
}
}
if (zhiShu) {
System.out.print(k + "\t");
count++;
if (count % 6 == 0)
System.out.println();
}
}
System.out.println("\n" + "101到205有质数" + count + "个");
}
}
9、输入两个正整数m和n,求其最大公约数和最小公倍数
用Scanner录入数据,输入的数据是正整数,用while循环把不合法的数据重新输入;最大公约数先比较两个正整数的大小,用小的一方进行尝试,直接作为除数,用两个正整数对小的一方进行求余,用&&同真则真,从大到小用for循环,可以得到最大公约数,用break;结束本次循环;最小公倍数从两个偏大的一方,作为被除数,对两个正整数取余,和最大公约数差不多的步骤,得到最小公倍数
package com.yan3;
import java.util.Scanner;
public class Test13 {
public static void main(String[] args) {
// 12、输入两个正整数m和n,求其最大公约数和最小公倍数
// 输入数据,要求正整数
Scanner sc = new Scanner(System.in);
int m = 0;
System.out.println("请输入第一个正整数:");
while (true) {
m = sc.nextInt();
if (m < 0)
System.out.println("输入的数据不合法,请重新输入");
else
break;
}
int n = 0;
System.out.println("请输入第二个正整数:");
while (true) {
n = sc.nextInt();
if (n < 0)
System.out.println("输入的数据不合法,请重新输入");
else
break;
}
// 获取最大公约数
// 从两个数的较小一方开始进行尝试,如果两个都能整除则是最大公约数
int yueShu = -1;
int min = Math.min(m, n);
for (int k = min; k > 1; k--) {
if (m % k == 0 && n % k == 0) {
yueShu = k;
break;
}
}
// 获取最小公倍数
int beiShu = -1;
int max = Math.max(m, n);
for (int k = max; k <= m * n; k++) {
if (k % m == 0 && k % n == 0) {
beiShu = k;
break;
}
}
// 输出
if (yueShu == -1)
System.out.println(m + "和" + n + "互质,最大公约数为 1 ");
else
System.out.println(m + "和" + n + "的最大公约数为 " + yueShu);
if (beiShu != -1)
System.out.println(m + "和" + n + "的最小公倍数为 " + beiShu);
}
}
10、100到50000之间有多少整数,其各位数字之和为5,分别是哪些数字,并统计满足条件的整数有多少个
跟水仙花数很类似
package com.yan3;
public class Test14 {
public static void main(String[] args) {
// 13、100 ~ 50000之间有多少整数,其各位数字之和为5,分别是哪些数
// (例如整数1324的各位数字之和为 1+3+2+4 等于10(不为5)),并统计
// 满足条件的整数有多少个
int count = 0;
for (int i = 100; i <= 50000; i++) {
int wan = i / 10000;
int qian = i / 1000 % 10;
int bai = i / 100 % 10;
int shi = i / 10 % 10;
int ge = i % 10;
if (wan + qian + bai + shi + ge == 5) {
System.out.print(i + "\t");
count++;
if (count % 6 == 0)
System.out.println();
}
}
System.out.println("100 ~ 50000之间有 " + count + " 个整数,其各位数字之和为5");
}
}
11、鸡兔同笼共80个头,208只脚,鸡和兔各有几只
用两个for循环也可以,用一个for循环和条件判断语句if都能计算出
都是用int i,j; //鸡兔的数量i+j=100; 2*i+4*j=208;这两个条件进行判断
package com.yan3;
public class Test15 {
public static void main(String[] args) {
// 14、鸡兔同笼共80个头,208只脚,鸡和兔各有几只
// int i, j;
// for (i = 1; i <= 80; i++) {
// j = 80 - i;
// if (2 * i + 4 * j == 208)
// System.out.println("鸡有" + i + "只,兔有" + j + "只");
// }
for (int i = 0; i <= 80; i++) {
for (int k = 0; k <= 80 - i; k++) {
if (i + k == 80 && 2 * i + 4 * k == 208)
System.out.println("鸡有" + i + "只," + "兔有" + k + "只");
}
}
}
}
12、鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何
跟鸡兔同笼类似
package com.yan3;
public class Test16 {
public static void main(String[] args) {
// 鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,
// 问鸡翁、鸡母、鸡雏各几何
// int i, j, k;
// for (i = 0; i <= 100; i++) {
// for (j = 0; j <= 100; j++) {
// k = 100 - i - j;
// if (k != 0)
// if (k % 3 == 0)
// if (5 * i + 3 * j + k / 3 == 100)
// System.out.println("鸡翁" + i + "只,鸡母" + j + "只,鸡雏" + k);
//
// }
// }
for (int i = 0; i <= 100; i++) {
for (int k = 0; k <= 100 - i; k++) {
for (int m = 0; m <= 100 - i - k; m++) {
if (m % 3 == 0) {
if (i + k + m == 100 && 5 * i + 3 * k + m / 3 == 100)
System.out.println("鸡翁有" + i + "只,鸡母有" + k + "只,鸡雏有" + m + "只");
}
}
}
}
}
}