基础编程题(6~10)
06、求最大公约数和最小公倍数
题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
6.1、程序分析
- 最大公约数
两数的最大公约数小于最小的数,且公约数对两数取余结果为0. - 最小公倍数
1、最小公倍数为两数之积除以最大公约数。
2、最小公倍数大于最大的一个数,且小于两数的乘积,并且两数对最小公倍数取余结果为0.
6.2、代码实现
import java.util.Scanner;
public class Test1 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入两个数m和n:");
int m = input.nextInt();
int n = input.nextInt();
// 判断两数的大小
int min = m > n ? n : m;
int max = m > n ? m : n;
// 输出最大公约数和最小公倍数
for (int i=min; i > 0; i--) {
if (m % i == 0 && n % i == 0) {
System.out.println("最大公约数是:" + i);
System.out.println("最小公倍数是:"+(n*m)/i);
break;
}
}
}
}
import java.util.Scanner;
public class Test2 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入两个数m和n:");
int m = input.nextInt();
int n = input.nextInt();
// 判断两数的大小
int min = m > n ? n : m;
int max = m > n ? m : n;
// 输出最大公约数
for (int i=min; i > 0; i--) {
if (m % i == 0 && n % i == 0) {
System.out.println("最大公约数是:" + i);
break;
}
}
// 输出最小公倍数
for (int i = max; i <= n * m; i++) {
if (i % m == 0 && i % n == 0) {
System.out.println("最小公倍数是:" + i);
break;
}
}
}
}
6.3、科普小课堂
最大公约数
最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个。a,b
的最大公约数记为(a,b)
,同样的,a,b,c
的最大公约数记为(a,b,c)
,多个整数的最大公约数也有同样的记号。求最大公约数有多种方法,常见的有质因数分解法、短除法、辗转相除法、更相减损法。
详细解析地址:最大公约数-百度百科
最小公倍数
两个或多个整数公有的倍数叫做它们的公倍数,其中除0
以外最小的一个公倍数就叫做这几个整数的最小公倍数。整数a,b
的最小公倍数记为[a,b]
,同样的,a,b,c
的最小公倍数记为[a,b,c]
,多个整数的最小公倍数也有同样的记号。
解法有质因数分解法、公式法。
详细解析地址:最小公倍数-百度百科
07、字符串的简单处理
题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
7.1、 程序分析
实现思路
- 定义一个长度为256(0~255)的数组来统计每个字符数量;
- 把数组的下标对应字符的数量;
- 打印输出统计的数量。
7.2、代码实现
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入字符串:");
String str = input.nextLine();
// 1、定义计数数组
int[] count = new int[256];
// 2、统计字符个数
for (int i = 0; i < count.length; i++) {
for (int j = 0; j < str.length(); j++) {
if (i == str.charAt(j)) {
count[i]++;
}
}
// 3、打印结果
if (count[i] > 0) {
System.out.print((char) i + "的个数: " + count[i] + "\n");
}
}
}
}
7.3、科普小课堂
7.3.1、next()和nextLine()的区别
Java
中Scanner
类中的方法next()
和nextLine()
都是吸取输入台输入的字符,区别:
-
next()
不会吸取字符前/后的空格/Tab
键,只吸取字符,开始吸取字符(字符前后不算)直到遇到空格/Tab
键/回车截止吸取; -
nextLine()
吸取字符前后的空格/Tab
键,回车键截止。
08、s=a+aa+aaa+aaaa+aa…a
题目:求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
8.1、程序分析
这道题可以从“字符”和“数字”两方面来考虑:
- 将a以字符来处理
实现思路
1.请输入重复的数字[1-9]
2.请输入重复相加的个数
3.判断数字是否合格,不合格重新输入
4.定义求和变量
5.定义每次的重复数字符串
6.打印输出的字符串 - 将a以数字来处理
实现思路
1.请输入重复的数字[1-9]
2.请输入重复相加的个数
3.22=210的1次方+2; 222 =210的2次方+22 2222=210的3次方+222
规则:当前第n位数等于210的(n-1)次方+前一个数
4.定义求和变量 int sum = 0;
8.2、代码实现
将a以字符来处理
import java.util.Scanner;
public class Test1 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int num;
int n;
do {
//1.请输入重复的数字[1-9]
System.out.println("请输入重复的数字[1-9]:");
num = input.nextInt();
//2.请输入重复相加的个数
System.out.println("请输入重复相加的个数:");
n = input.nextInt();
} while (num < 1 || num > 9);//3.判断数字是否合格,不合格重新输入
//4.定义求和变量
int sum = 0;
//5.定义每次的重复数字串
String temp = "";
//6.打印输出的字符串
String str = "";
for (int i = 0; i < n; i++) {
temp +=""+num;
sum += Integer.valueOf(temp);
if(i<n-1)
str+=temp+"+";
else
str+=temp;
}
System.out.println(sum+"="+str);
}
}
将a以数字来处理
import java.util.Scanner;
public class Test2 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int num;
int count;
do {
//1.请输入重复的数字[1-9]
System.out.println("请输入重复的数字[1-9]:");
num = input.nextInt();
//2.请输入重复相加的个数
System.out.println("请输入重复相加的个数:");
count = input.nextInt();
} while (num < 1 || num > 9);//3.判断数字是否合格,不合格重新输入
//4.定义求和变量
int sum = 0;
int temp = num;
for (int i = 1; i <=count; i++) {
if(i<count)
System.out.print(temp+"+");
else
System.out.print(temp);
sum += temp;
temp = num * (int)Math.pow(10, i)+temp;
}
System.out.println("="+sum);
}
}
09、完数
题目:一个数如果恰好等于它的所有因子之和,这个数就称为 "完数 "。例如6=1+2+3.编程 找出1000以内的所有完数。
9.1、程序分析
- 实现思想
1、找出数字num的所有因数并求和(sum)
2、进行num与sum的比较
9.2、代码实现
public class Test {
public static void main(String[] args) {
int sum;
for (int i = 1; i <= 1000; i++) {
sum = 0;
for (int j = 1; j < i; j++) {
if (i % j == 0) {
sum += j;
}
}
if (i == sum) {
System.out.println(i);
}
}
}
}
10、自由落体的高度
题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
10.1、程序分析
- 实现思路
1.定义一个循环,循环次数就是返弹的次数
2.定义一个中间变量,每次返弹的高度
10.2、代码实现
public class Test {
public static void main(String[] args) {
double height=100;//高度
double temp = 0;
double sum = height;//物体落体时经过的路程
for (int i = 0; i < 10; i++) {
sum += temp * 2;
temp = height / 2.0;
height = temp;
}
System.out.println("第" + 10 + "次落地时,共经过" + sum + "米,第" + 10 + "次反弹" + temp + "米。");
}
}