1. 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,
小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
/**
* 题目分析: 第一个月:1对
* 第二个月:1对
* 三: 2对
* 四: 3对
* 五: 5对
* .......
* 兔子的规律为数列1,1,2,3,5,8,13,21....
* f(n) = f(n-1) + f(n-2) n>2
* @作者: HK
*/
public class Example1 {
public static void main(String[] args) {
int n;
Scanner input = new Scanner(System.in);
System.out.println("请输入求第几个月的兔子总数:");
n=input.nextInt();
for (int i =1; i <= n; i++) {
System.out.println(f(i));
}
System.out.println("兔子总数为:"+f(n));
}
public static int f(int x){
if(x==1 || x==2){
return 1;
}
else {
return f(x-1)+f(x-2);
}
}
}
2.题目:判断101-200之间有多少个素数,并输出所有素数。
/**
*程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。
*/
public class Example2 {
public static void main(String[] args) {
int j,i;
for ( i = 101; i <=200; i++) {
for ( j = 2; j int n=i%j; if(n==0) break; } if(j>Math.sqrt(i)) System.out.println(i+"是素数"); } } } 3.题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。 /** * 例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方。 * @作者: HK */ public class Example3 { public static void main(String[] args) { int a; //表示个位 int b; //表示十位 int c; //表示百位 for (int i = 100; i <=999; i++) { c=i/100; b=(i-c*100)/10; a=i%10; if(a*a*a + b*b*b +c*c*c ==i){ System.out.println(i+"是水仙花数"); } } } } 4.题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5 import java.util.Scanner; /** * 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5 * 分析:任何一个合数都可以写成几个质数相乘的形式。其中每个质数都是这个合数的因数,叫做这个合数的分解质因数。 * 分解质因数只针对合数。 */ public class Example4 { public static void main(String[] args){ int N; System.out.println("请输入N的值:"); Scanner input = new Scanner(System.in); N=input.nextInt(); System.out.print(N+ "分解质因数: "+N+ "= "); int n=N,i=2; while(n>2){ if(n%i==0){ if(n/i==1){ System.out.print(i); }else{ System.out.print(i+ "* "); } n=n/i; } else { i++; } } } } 5.题目:输入两个正整数m和n,求其最大公约数和最小公倍数。 import java.util.Scanner; /** * 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。 * * 分析:求最大公约数可以用辗转相除法 * 最小公倍数为:m*n/最大公约数 * @作者: HK */ public class Example6 { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("请输入两个正整数数值:"); int a=input.nextInt(); int b=input.nextInt(); int m=a,n=b; int y =gys(m, n); System.out.println("最大公约数为:"+y); System.out.println("最小公倍数为:"+m*n/y); } //方法一 public static int gys(int m,int n){ int c = 0; if(m int t=m; m=n; n=t; } while(n!=0){ if (n==1) { return 1; } else{ c=m%n; m=n; n=c; } } return m; } //方法二 // public static int gys(int m,int n){ // while(true){ // if((m = m%n )==0) // return n; // if((n = n%m)==0 ) // return m; // } // } } 6.题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 import java.util.Scanner; /** * 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 * @作者: HK */ public class Example7 { public static void main(String[] args) { int zimu=0; int kongge = 0; int number = 0; int other = 0; System.out.println("请输入一行字符:"); String input = new Scanner(System.in).nextLine(); char[] array = input.toCharArray(); for (int i = 0; i < array.length; i++) { if( (array[i]>='a' && array[i]<='z') || (array[i]>='A' && array[i]<='Z' ) ) zimu++; else if(array[i]==' ') kongge++; else if(array[i]>='0' && array[i]<='9') number++; else { other++; } } System.out.println("字母个数:"+zimu +"空格个数:"+kongge +"数字个数:"+number +"其他:"+other); } } 7.题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。 import java.util.Scanner; /** * 题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。 * 例如: 2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。 * @作者: HK */ public class Example8 { public static void main(String[] args) { //第一个整数为几个数,第二个是数值为m 例如: n=5 m=2 System.out.println("请输入两个正整数:"); Scanner input = new Scanner(System.in); int n = input.nextInt(); int m = input.nextInt(); int sum=0; int a=0; for(int j = 1;j<=n;j++){ int s=0; for (int i = 0; i a= (int) (m*(Math.pow(10,i))); s=s+a; } System.out.println(s); sum=s+sum; } System.out.println("和为:"+sum); } } 8.题目:一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3.编程 找出1000以内的所有完数。 /** * 题目:一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3.编程 找出1000以内的所有完数。 * 分析:求出每个数的因子,让他们相加的和与这个数作比较,如果相等就是完数。 * @作者: HK */ public class Example9 { public static void main(String[] args) { for (int i = 2; i < 1000; i++) { int s=0; for (int j = 1; j < i; j++) { if(i%j==0){ s+=j; } } if(s==i) System.out.print(i+" "); } System.out.println(); } // public static void main(String[] args){ // int s; // for(int i=1;i <=1000;i++) // { // s=0; // for(int j=1;j
// if(i % j==0) // s=s+j; // if(s==i) // System.out.print(i+ " "); // } // System.out.println(); // // } // } 9. 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? /** * 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? * 程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列 * @作者: HK */ public class Example11 { public static void main(String[] args) { int t=0; for (int i = 1; i <= 4; i++) for(int j=1;j<=4;j++) for(int k=1;k<=4;k++) if(i!=j && j!=k && k!=i){ t+=1; System.out.println(i*100+j*10+k); } System.out.println("共有多少种排序:"+t); } } 10. 题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? /** * 题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? * @作者: HK */ public class Example12 { public static void main(String[] args) { for(int i=1;i<100000;i++){ if(Math.sqrt(i+100)%1==0 && Math.sqrt(i+100+168)%1==0){ System.out.println("得到的数字是:"+i); } } } } 11.题目:输出9*9口诀。 /** * 题目:输出9*9口诀。 * @作者: HK */ public class Example13 { public static void main(String[] args) { System.out.println("倒序9*9:"); for(int i=1; i<=9; i++){ for(int j=i; j<=9; j++ ) System.out.print(i+"*"+j+"="+i*j+" "); System.out.println(); } System.out.println("正序9*9:"); for (int i = 1; i <= 9; i++) { for(int j = 1;j<=i;j++){ System.out.print(j+"*"+i+"="+i*j+" "); } System.out.println(); } System.out.println(); int i=0; int j=0; for(i=1;i<=9;i++) { for(j=i;j<=9;j++) System.out.print(i+"*"+j+"="+i*j+" "); System.out.println(); } System.out.println(); for(i=1;i<=9;i++) { for(j=1;j<=i;j++) System.out.print(i+"*"+j+"="+i*j+" "); System.out.println(); } } } 12.猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。 以后每天早上都吃了前一天剩下 的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。 package Example01; /** * 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。 * 以后每天早上都吃了前一天剩下 的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。 * @作者: HK */ public class Example14 { public static void main(String[] args) { int n=10; int s=1; while(n>1){ s=(s+1)*2; n--; System.out.println("第"+n+"天共有"+s+"桃子"); } System.out.println(s); } // static int total(int day){ // if(day == 10){ // return 1; // } // else{ // return (total(day+1)+1)*2; // } // } //public static void main(String[] args) //{ // System.out.println(total(1)); //} } 13.题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。 有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单 /** * 题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。 * 有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单 * @作者: HK */ public class Example15 { public static void main(String[]args){ char i,j,k; /*i是a的对手,j是b的对手,k是c的对手*/ for(i='x';i<='z';i++) for(j='x';j<='z';j++){ if(i!=j) for(k='x';k<='z';k++){ if(i!=k && j!=k){ if(i!='x' && k!='x'&& k!='z') System.out.println(" a Vs "+i+"\n"+ " b Vs "+j+"\n"+ "c Vs " +k); } } } } } 14.题目:打印出如下图案(菱形) /** * 题目:打印出如下图案(菱形) * ** ***** ******* ****** *** * * @作者: HK */ public class Example16 { public static void main(String[] args) { for (int i = 1; i <= 4; i++) { for(int j=1; j<=2*i-1;j++) System.out.print("*"); System.out.println(); } for (int i = 1; i <=3; i++) { for(int j=1; j<=7-2*i;j++) System.out.print("*"); System.out.println(); } } } 15.打印三角和菱形 /** * 打印三角和菱形 * @作者: HK */ public class Example17 { public static void main(String [] args) { int i=0; int j=0; for(i=1;i<=4;i++) { for(j=1;j<=2*i-1;j++) System.out.print("*"); System.out.println(""); } for(i=4;i>=1;i--) { for(j=1;j<=2*i-3;j++) System.out.print("*"); System.out.println(""); } for(i=1;i<=4;i++) { for(int k=1; k<=4-i;k++) System.out.print(" "); for(j=1;j<=2*i-1;j++) System.out.print("*"); System.out.println(""); } for(i=4;i>=1;i--) { for(int k=1; k<=5-i;k++) System.out.print(" "); for(j=1;j<=2*i-3;j++) System.out.print("*"); System.out.println(""); } } } 16. 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。 /** * 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。 * @作者: HK */ public class Example18 { public static void main(String[] args) { double fenmu=1; double fenzi=2; double sum=0; System.out.print("sum="); for (int j = 0; j < 20; j++) { double temp; temp=fenzi; sum=sum+fenzi/fenmu; if(j==19){ System.out.print(fenzi+"/"+fenmu); System.out.println(); }else { System.out.print(fenzi+"/"+fenmu+"+ "); } fenzi=fenzi+fenmu; fenmu=temp; } System.out.println(sum); } } 17. 题目:求1+2!+3!+...+20!的和。 /** * 题目:求1+2!+3!+...+20!的和。 * @作者: HK */ public class Example19 { public static void main(String[] args) { long sum=0; for (int i = 1; i <= 20; i++){ long n=1; for (int j = 1; j <= i; j++) { n=n*j; } System.out.println(i+"!"+"="+n); sum+=n; } System.out.println(sum); /* * 另一种方法 */ long num =0; for (int i = 1; i <=20; i++) { num += getFactorial(i); } System.out.println(num); } public static long getFactorial(int n){ if (n ==1) return 1; return n*getFactorial(n-1); } } 18.题目:利用递归方法求5!。 import java.util.Scanner; /** * 题目:利用递归方法求5!。 * @作者: HK */ public class Example20 { public static void main(String[] args) { System.out.println("请输入一个递归数n:"); int n = new Scanner(System.in).nextInt(); Example20 trf =new Example20(); long sum = trf.recursion(n); System.out.println(n+"!="+sum); } public long recursion(int n) { long value = 0 ; if(n ==1 || n == 0) { value = 1; } else if(n > 1) { value = n * recursion(n-1); } return value; } } 19. 题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。 最后问第一个人,他说是10岁。请问第五个人多大? public class Example21 { public static void main(String[] args) { int n=5; int age =Age(n); System.out.println(age); } public static int Age(int n){ if(n==1) return 10; else { return Age(n-1)+2; } } } 20.题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。 import java.util.Scanner; /** * 题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。 * @作者: HK */ public class Example22 { public static void main(String[] args) { System.out.println("请输入一个不多于5位的正整数:"); int input = new Scanner(System.in).nextInt(); int n=input; System.out.print(n+"的倒序为:"); int i=0; while(n!=0){ int k=n%10; System.out.print(k); n=n/10; i++; } System.out.println(); System.out.println(input+"是"+i+"位数"); } }