基础编程题(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、 程序分析

实现思路

  1. 定义一个长度为256(0~255)的数组来统计每个字符数量;
  2. 把数组的下标对应字符的数量;
  3. 打印输出统计的数量。

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()的区别

JavaScanner类中的方法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位数等于2
    10的(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 + "米。");
	}
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值