1. 题目:古典问题:有一对兔子,从出生后第3个月起每月都生一对兔子,
小兔子长到第四个月后每月又生一对兔子,假如兔子都不死,问每月的兔子总数为多少?java
/**
* 题目分析: 第一个月: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*5code
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是一个数字。get
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之内的全部完数。input
/**
* 题目:一个数若是刚好等于它的因子之和,这个数就称为 "完数 "。例如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. 题目:有一、二、三、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?io
/**
* 题目:有一、二、三、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
* 程序分析:可填在百位、十位、个位的数字都是一、二、三、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又是一个彻底平方数,请问该数是多少?class
/**
* 题目:一个整数,它加上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位的正整数,要求:1、求它是几位数,2、逆序打印出各位数字。
import java.util.Scanner;
/**
* 题目:给一个很少于5位的正整数,要求:1、求它是几位数,2、逆序打印出各位数字。
* @做者: 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){
intk=n%10;
System.out.print(k);
n=n/10;
i++;
}
System.out.println();
System.out.println(input+"是"+i+"位数");
}
}
21.题目:一个5位数,判断它是否是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
import java.util.Scanner;
/**
* 题目:一个5位数,判断它是否是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
* @做者: HK
*/
public class Example23 {
public static void main(String[] args) {
System.out.println("请输入一个五位数的正整数:");
int n = new Scanner(System.in).nextInt();
int a=n%10;
int b=n%100/10;
int w=n/10000;
int q=n/1000%10;
//System.out.println(a+" "+b+" "+q+" "+w);
if(a==w && b==q){
System.out.println(n+"是回文数");
}else {
System.out.println(n+"不是回文数");
}
}
}
22.矩阵转置
/**
* 矩阵转置
* @做者: HK
*/
public class Example24 {
public static void main(String [] args) {
int data [][] = new int [] [] { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } } ;
System.out.println("----------------转置前------------------------") ;
print1(data) ;
reverse(data) ;
System.out.println("----------------转置后------------------------") ;
print1(data) ;
}
// 将矩阵转置
public static void reverse(int temp [][]) {
for (int i = 0; i < temp.length; i++) {
for (int j = i; j < temp[i].length; j++) {
int k = temp[i][j] ;
temp[i][j] = temp[j][i] ;
temp[j][i] = k ;
}
}
}
// 将矩阵输出
public static void print1(int temp [][]) {
for (int i = 0; i < temp.length; i++) {
for (int j = 0; j < temp[i].length; j++) {
System.out.print(temp[i][j] + "\t") ;
}
System.out.println() ;
}
}
}
23. 题目:对10个数进行排序。
import java.util.Scanner;
/**
* 题目:对10个数进行排序。
* @做者: HK
*/
public class Example25 {
public static void main(String[] args) {
System.out.println("请输入10个整数:");
Scanner input = new Scanner(System.in);
int[] array= new int[10];
for (int i = 0; i < array.length; i++) {
array[i]=input.nextInt();
}
for (int i = 0; i <= array.length-1; i++) {
for (int j = 0; j < array.length-1; j++) {
if(array[j]>array[j+1]){
int temp = array[j];
array[j]=array[j+1];
array[j+1]=temp;
}
}
}
System.out.println("排序后:");
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]+" ");
}
}
}
24.任意数组转置
public class Example26 {
public static void main(String[] args) {
int [][] Test={{1,3,9,11},{22,26,7,10},{4,5,7,3}};
int [][] Matrix = Transpose(Test,3,4);
System.out.println("-------转置前---------") ;
myPrint(Test);
System.out.println("-------转置后---------") ;
myPrint(Matrix);
}
public static int[][] Transpose(int[][] matrix,int x,int y){
int [][] Matrix = new int [y][x];
for (int i = 0; i < x; i++) {
for (int j = 0; j < y; j++) {
Matrix[j][i] = matrix[i][j];
}
}
return Matrix;
}
public static void myPrint(int temp[][]){
for (int i = 0; i < temp.length; i++) {
for (int j = 0; j < temp[i].length; j++) {
System.out.print(temp[i][j]+"\t");
}
System.out.println();
}
}
}