1.题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5*。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
答:
package cn.edu.hit;
/**
* 任意整数分解 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
* 程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
* (2)如果n>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。
* (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
*
* @author tonylp
*/
public class resolveNum {
public static final int NUM = 130;
public static void main(String[] args) {
// TODO Auto-generated method stub
int k = 2;
int num = NUM;
System.out.print(num + "=");
while (num > k) {
if (num % k == 0) {
System.out.print(k + "*");
num = num / k;
} else {
k++;
}
}
System.out.println(k);
}
}
2.题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
程序分析:利用辗除法。
答:
package cn.edu.hit;
import java.util.Scanner;
/**
* 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
* 1.程序分析:利用辗除法。
* @author tonylp
*/
public class comonDivisor {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
int first = a;
int second = b;
System.out.println("a=" + a + ";b=" + b);
int temp;
if (a < b) {
temp = a;
a = b;
b = temp;
}
while (b != 0) {
temp = a % b;
a = b;
b = temp;
}
System.out.println("最大公约数为"+a);
System.out.println("最小公倍数为"+first*second/a);
}
}
3.题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21….
package cn.edu.hit;
/**
* 兔子问题
* 斐波那契数列求值
* @author tonylp
*题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,
*小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
*1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....
*/
public class rabbit {
public static final int MONTH = 15;
public static void main(String[] args) {
// TODO Auto-generated method stub
long f1 = 1L, f2 = 1L;
long f;
for(int i=3;i<MONTH;i++){
f=f1+f2;
f1=f2;
f2=f;
System.out.println("第"+i+"个月的兔子对数:"+f2);
}
/*
for(int i =1 ; i<MONTH; i++){
System.out.println("第"+i+"个月的兔子对数:"+fib(i));
}
*/
}
//递归方法实现
public static int fib(int month){
if(month == 1 || month == 2){
return 1;
}else{
return fib(month-1)+fib(month-2);
}
}
}
4.题目:打印出所有的”水仙花数”,所谓”水仙花数”是指一个三位数,其各位数字立方和等于该数本身。
例如:
153是一个”水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
package cn.edu.hit;
/**
* 题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。
* 例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
* 1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
*
* @author tonylp
*/
public class daffodils {
public static void main(String[] args) {
int a, b, c;
int data;
for (int i = 100; i < 999; i++) {
a = i / 100;
b = (i - 100 * a) / 10;
c = i - 100 * a - 10 *b;
data = a*a*a+b*b*b+c*c*c;
if(data == i){
System.out.println(i);
}
}
}
}