基础编程题(1~5)

基础编程题(1~5)

  • 01、斐波那契数列
    • 1.1、程序分析
    • 1.2、代码实现
  • 02、判断素数(Prime number)
    • 2.1、程序分析
    • 2.2、代码实现
    • 2.3、科普小课堂:素数
      • 2.3.1、素数的定义
      • 2.3.1、素数的性质
      • 2.3.3、素数的应用
  • 03、水仙花数(Narcissistic number)
    • 3.1、程序分析
    • 3.2、代码实现
    • 3.3、科普小课堂:水仙花数
      • 3.3.1、水仙花数的定义
      • 3.3.2、常见的水仙花数
  • 04、正整数分解质因数
    • 4.1、程序分析
    • 4.2、代码实现
  • 05、判断成绩等级
    • 5.1、程序分析
    • 5.2、代码实现

01、斐波那契数列

古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总对数为多少?

1.1、程序分析

月数 成兔对数 幼兔对数 兔子总对数
第1月 1 0 1
第2月 1 0 1
第3月 1 1 2
第4月 1 2 3
第5月 2 3 5
第6月 3 5 8
第7月 4 9 13
注意:两个月以上的兔子为成年。

规律总结:兔子总对数的规律如下
1,1,2,3,5,8,13,21,34,55,89,……
数学表达式:
		F(n)=1;(n=1,2)
		F(n)=F(n-1)+F(n-2);(n>=3)
		注意:n为月数,F(n)为第n月的兔子对数。

1.2、代码实现

import java.util.Scanner;

public class Rabbit {

	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.print("请输入月数(n为任意正整数)n = ");
		int n = input.nextInt();
		int a1 = 1, a2 = 1;// 定义初始变量
		int a;
		for (int i = 0; i < n; i++) {
			if (i < 2) {
				System.out.println("第" + (i + 1) + "月兔子有" + 1 + "对");
			} else {
				a = a1 + a2;
				System.out.println("第" + (i + 1) + "月兔子有" + a + "对");
				a1 = a2;
				a2 = a;
			}
		}

	}

}

import java.util.Scanner;

public class Rabbit {

	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.print("请输入月数(n为任意正整数)n = ");
		int n = input.nextInt();
		for (int i = 1; i <= n; i++) {
			int num = f(i);
			System.out.println("第" + i + "月兔子有" + num + "对");
		}
	}
//	递归方法1
	private static int f(int i) {
		if (i == 1 || i == 2) {
			return 1;
		} else {
			return f(i - 1) + f(i - 2);
		}
	}
	
}
//	递归方法2  优
private static int f(int i) {
		if (n < 3)
			return 1;
		else 
			return fibonacciSequence(n-1)+fibonacciSequence(n-2);
	}
// 递归方法3   最优
private static int f(int i) {
	  return n<3 ? 1:fibonacciSequence(n-1)+fibonacciSequence(n-2);
}

02、判断素数(Prime number)

题目:判断101-200之间有多少个素数,并输出所有素数。

2.1、程序分析

判断素数的方法:用一个数分别在2~sqrt(这个数)的范围内取余,如果余数为零, 则表明此数不是素数,反之是素数。

2.2、代码实现

public class PrimeNumber {
	
	public static void main(String[] args) {
		boolean result;
		for (int i = 101; i <= 200; i++) {
			result = false;
			for (int j = 2; j < Math.sqrt(i); j++) {
				if (i % j == 0) {
					result = true;
					break;
				}
			}
			if (result == false) {
				System.out.println(i + " ");
			}
		}
	}
}

2.3、科普小课堂:素数

参考文档地址:百度百科-素数.

2.3.1、素数的定义

质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数(规定1既不是质数也不是合数)。

2.3.1、素数的性质

质数具有许多独特的性质:

  1. 质数p的约数只有两个:1和p。
  2. 初等数学基本定理:任一大于1的自然数,要么本身是质数,要么可以分解为几个质数之积,且这种分解是唯一的。
  3. 质数的个数是无限的。
  4. 质数的个数公式 是不减函数。
  5. 若n为正整数,在 到 之间至少有一个质数。
  6. 若n为大于或等于2的正整数,在n到 之间至少有一个质数。
  7. 若质数p为不超过n( )的最大质数,则\frac{n}{2}"> 。
  8. 所有大于10的质数中,个位数只有1,3,7,9

2.3.3、素数的应用

  1. 质数被利用在密码学上,所谓的公钥就是将想要传递的信息在编码时加入质数,编码之后传送给收信人,任何人收到此信息后,若没有此收信人所拥有的密钥,则解密的过程中(实为寻找素数的过程),将会因为找质数的过程(分解质因数)过久,使即使取得信息也会无意义。
  2. 在汽车变速箱齿轮的设计上,相邻的两个大小齿轮齿数设计成质数,以增加两齿轮内两个相同的齿相遇啮合次数的最小公倍数,可增强耐用度减少故障。
  3. 在害虫的生物生长周期与杀虫剂使用之间的关系上,杀虫剂的质数次数的使用也得到了证明。实验表明,质数次数地使用杀虫剂是最合理的:都是使用在害虫繁殖的高潮期,而且害虫很难产生抗药性。
  4. 以质数形式无规律变化的导弹和鱼雷可以使敌人不易拦截。 多数生物的生命周期也是质数(单位为年),这样可以最大程度地减少碰见天敌的机会。

03、水仙花数(Narcissistic number)

题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方。

3.1、程序分析

将三位数的个位、十位、百位都分别分离出来,然后去其各自的立方数,求和后与元数据进行比较是否相等。
Java中使用pow(a,b)方法计算数据a的b次幂。
Java pow()方法(菜鸟教程)

3.2、代码实现

public class NarcissisticNumber1 {

	public static void main(String[] args) {
		for (int num = 100; num <= 999; num++) {
			int a = (num / 100) % 10;
			int b = (num / 10) % 10;
			int c = num % 10;
			if ((a * a * a) + (b * b * b) + (c * c * c) == num) {
				System.out.println(num);
			}
		}
	}
}
public class NarcissisticNumber2 {

	public static void main(String[] args) {
		for (int num = 100; num <= 999; num++) {
			int a = (num / 100) % 10;
			int b = (num / 10) % 10;
			int c = num % 10;
			if (Math.pow(a, 3) + Math.pow(b, 3) + Math.pow(c, 3) == num) {
				System.out.println(num);
			}
		}
	}
}

3.3、科普小课堂:水仙花数

参考资料地址:百度百科-水仙花数.

3.3.1、水仙花数的定义

水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。

附:其他位数的自幂数名字

  1. 一位自幂数:独身数
  2. 两位自幂数:没有
  3. 三位自幂数:水仙花数
  4. 四位自幂数:四叶玫瑰数
  5. 五位自幂数:五角星数
  6. 六位自幂数:六合数
  7. 七位自幂数:北斗七星数
  8. 八位自幂数:八仙数
  9. 九位自幂数:九九重阳数
  10. 十位自幂数:十全十美数

3.3.2、常见的水仙花数

水仙花数又称阿姆斯特朗数。

自幂数名称 总数 自幂数
水仙花数 4 153,370,371,407
四叶玫瑰数 3 1634,8208,9474
五角星数 3 54748,92727,93084
六合数 1 548834
北斗七星书 4 1741725,4210818,9800817
八仙数 3 24678050,24678051,88593477

04、正整数分解质因数

题目:将一个正整数分解质因数。例如:输入90,打印出90 = 2 * 3 * 3 * 5。

4.1、程序分析

对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:

  1. 如果这个质数恰好等于n,则说明分解质因数的过程已经结束,打印出即可;
  2. 如果n > k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n,重复执行第一步;
  3. 如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

4.2、代码实现

import java.util.Scanner;

public class PrimeFactor {

	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		int num;
		String result;
		do {
	    	int count = 0;
			System.out.println("请输入一个整数,输出所有质因数:");
			num = input.nextInt();
			System.out.print(num + "=");
			for (int i = 2; i <= num; i++) {
				if (num % i == 0) { // 质因数
					if (count == 0)
						System.out.print(i);
					else
						System.out.print("*" + i);
					num = num / i;
					if (num > i) {
						i--;
					}
					count++;
				}
			}
			System.out.println("\n还有继续吗?(y/n)");
			result = input.next();
		} while ("y".equalsIgnoreCase(result));

	}

}

05、判断成绩等级

题目:利用条件运算符的嵌套来完成此题:学习成绩> =90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。

5.1、程序分析

这个问题比较简单,使用if条件语句就可以轻松解决,不过也可以使用switch语句来解决。

5.2、代码实现

并列条件

mport java.util.Scanner;

public class JudgmentGrade1 {

	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.print("请输入一门课目的成绩:");
		int score = input.nextInt();
//		并列条件
		if (score >= 90) {
			System.out.print("A");
		} else if (score >= 60 && score < 90) {
			System.out.print("B");
		} else {
			System.out.print("C");
		}
	}

}

条件运算符的嵌套

import java.util.Scanner;

public class JudgmentGrade2 {

	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.print("请输入一门课目的成绩:");
		int score = input.nextInt();
		// 条件运算符的嵌套
		if (score >= 60) {
			if (score >= 90) {
				System.out.print("A");
			} else {
				System.out.print("B");
			}
		} else {
			System.out.print("C");
		}
	}

}

你可能感兴趣的:(基础编程题,java,算法)