Java基础编程题50道题

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

思路:微笑刚开始真的无从下手,这么难的,怎么可以说是基础呢,感觉这些应该是逻辑分析很强的,第一个月只有一对兔子,第二个月还是只有一对兔子,第三个月,就有两对了,第四个月3对,第五个月5对,第六个月8对,第七个月是13对。。。。。。规律出来了,你们发了没?

public class TestDay01 {
    public static void main(String[] args) {
        /**
         * 规律是每个数字都是前面两个数字之和
         * i是表示月份,这里计算了36个月,也就是三年,兔子的数量
         */
        int i;
        long arr[] = new long[36];  //这个数组时用来计算每月有兔子的对数
        arr[0] = arr[1] = 1;
        System.out.println("第1个月兔子1对" + "," + "总数是" + 2);
        System.out.println("第2个月兔子1对" + "," + "总数是" + 2);
        for (i = 2; i < 35; i++) {
            arr[i] = arr[i - 1] + arr[i - 2];
            System.out.println("第" + i + "个月有兔子" + arr[i] + "对" + "," + "总数是" + 2 * arr[i]);
        }
    }
}

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

思路:素数又叫质数,就是除了1和它本身之外,再也没有整数能被它整除的数。也就是素数只有两个因子。

public class TestDay02 {
    public static void main(String[] args) {
        int i, j, n, m, x;                        //n是用来存储余数的、m是用来统计具体一个数的因子、x是用来统计101~200直接素数的个数
        n = 0;
        m = 0;
        x = 0;
        for (i = 101; i < 200; i++) {            //两重循环
            for (j = 1; j <= i; j++) {
                n = i % j;                       //去余数,如果余数为零,就是该数的因子
                if (n == 0) {                    //统计某数有多少个因子
                    m = m + 1;
                }
            }
            if (m == 2) {                        //如果某数的因子只有两个,那它就一定是素数,那这个数就应该输出
                System.out.println(i + " ");
                x = x + 1;
            }
            m = 0;                               //清零,不清了会继续累加
        }
        System.out.println();
        System.out.println("在101~200之间一共有素数:" + x + "个");

    }
}

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

第一种:

public class TestDay03 {
    public static void main(String[] args) {
        /**
         *  java的运算符,立方要这样写,写成i^3这样,竟然运算不出来
         *  如果遇到高次的话可以使用循环算出来
         */
        int a, sum;                        //表示100~999
        int i, j, k;                        //分别表示百位、十位、各位
        for (a = 100; a <= 999; a++) {
            i = a / 100;
            j = (a - i * 100) / 10;
            k = a - i * 100 - j * 10;
            sum = i * i * i + j * j * j + k * k * k;
            if (sum == a) {
                System.out.println(sum);
            }
        }
    }
}

第二种:

public class TestDay03 {
    public static void main(String[] args) {
        int sum;
        int i,j,k;                     //分别表示百位、十位、各位
        for (i = 1; i <=9 ; i++) {
            for (j = 0; j <=9 ; j++) {
                for (k = 0; k <=9 ; k++) {
                    sum = i * i * i + j * j * j + k * k * k;
                    if (i*100+j*10+k==sum){
                        System.out.println(sum);
                    }
                }
            }
        }
    }
}

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

(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。

(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。

(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

public class TestDay04 {
    public static void main(String[] args) {
        int x;
        Scanner scanner = new Scanner(System.in);  //定义从键盘输入
        System.out.println("请输出一个整数:");     //提示
        x = scanner.nextInt();    //将从键盘输入的数赋值给x
        new PrimeSplit(x);
    }

    private static class PrimeSplit {
        int k = 2;    //将最小的质数赋值给K
        public PrimeSplit(int x) {    //小于等于1的数不可以分解
            if (x <= 1) {
                System.out.println(x + "是无效的被分解数");
            } else if (x == 2) {
                System.out.println(x + "分解后的质数为:1*" + x);   //如果输入的是最小质数2
            } else {
                System.out.println(x + "分解后的质数为:1");   //1是所有的整数的质数
                while (k <= x) {   //输入的数可以被K整除
                    if (x % k == 0) {
                        System.out.println("*" + k);    //将k添加到结果中
                        x = x / k;     //除以最小质数后重新循环
                    } else {
                        k++;
                    }
                }
            }
        }
    }
}

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

public class TestDay05 {
    public static void main(String[] args) {
        int score = 90;      //分数的值可以随便修改
        if (score >= 90) {
            System.out.println("A");
        } else if (score >= 60) {
            System.out.println("B");
        } else {
            System.out.println("C");
        }
    }
}

6、题目:输入两个正整数m和n,求其最大公约数和最小公倍数。

public class TestDay06 {
    public static void main(String[] args) {
        gcdlcm gcdlcm = new gcdlcm();
        System.out.println("两个数的最大公约数是:" + gcdlcm.gcd(10, 16));
        System.out.println("两个数的最小公约数是:" + gcdlcm.lcm(10, 16));
    }

    private static class gcdlcm {
        int gcd(int m, int n) {
            if (m < n) {   //这个判断是为了将大数放在前面
                int temp = n;
                n = m;
                m = temp;
            }
            if (m % n == 0) {
                return n;
            } else {
                m %= n;
                return gcd(m, n);  //这里也可以成gcd(n,m),就省掉了前面的判断了,会快一点
            }
        }

        int lcm(int m, int n) {
            int i = 1;
            if (m < n) {   //这个判断是为了将大数放在前面
                int temp = n;
                n = m;
                m = temp;
            }
            int lcm = m;
            while (lcm % n != 0) {
                lcm = m * i;
                i++;
            }
            return lcm;
        }
    }
}

7、题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

public class TestDay07 {
    public static void main(String[] args) {
        int abcCount = 0;        //英文字母个数
        int spaceCount = 0;      //空格键个数
        int numCount = 0;        //数字个数
        int otherCount = 0;      //其他字符个数
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输出:");     //提示
        String str = scanner.nextLine();
        char[] ch = str.toCharArray();
        for (int i = 0; i < ch.length; i++) {
            if (Character.isLetter(ch[i])) {
                //判断是否字母
                abcCount++;
            } else if (Character.isDigit(ch[i])) {
                //判断是否数字
                numCount++;
            } else if (Character.isSpaceChar(ch[i])) {
                //判断是否空格
                spaceCount++;
            } else {
                //以上都不是则认为是其他字符
                otherCount++;
            }
        }
        System.out.println("字母个数:" + abcCount);
        System.out.println("数字个数:" + numCount);
        System.out.println("空格个数:" + spaceCount);
        System.out.println("其他字符个数:" + otherCount);
    }
}

8、题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。

public class TestDay08 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int num = 0, num1 = 0, num2 = 0, temp = 0;
        System.out.println("请输出数字:");
        num1 = input.nextInt();
        num = num1;
        temp = num1;
        System.out.println("请输入项数:");
        num2 = input.nextInt();
        for (int i = 0; i < num2; i++) {
            num = (num * 10 + num1);
            temp += num;
        }
        System.out.println(temp);
    }
}

### 9、题目:一个数如果恰好等于它的因子之和, 这个数就称为”完数”。例如6=1+2+3.编程找出1000以内的所有完数。

分析:没啥特别好分析的,注意类名尽量不要学我用拼音取名吧23333。

/**
 *题目:一个数如果恰好等于它的因子之和, 这个数就称为”完数”。例如6=1+2+3.编程找出1000以内的所有完数。
 */
public class TestDay09 {

	public static void main(String[] args) {
		int sum = 0;
		for (int j = 2; j <= 1000; j++) {
			for (int i = 1; i < j; i++) {
				if (j % i == 0) {
					sum += i;
				}
			}
			if (j == sum) {
				System.out.println(j);
			}
			sum = 0; // 置0留着下轮继续使用
		}

	}
}

10、题目:一球从h米高度自由落下,每次落地后反跳回原高度的一半;

再落下,求它在 第n次落地时,共经过多少米?第n次反弹多高?

分析:画个草图应该就能分析出来(本题为方便检验将高度h定位100米)。

/**
 *  一球从h米高度自由落下,每次落地后反跳回原高度的一半;
 *再落下,求它在 第n次落地时,共经过多少米?第n次反弹多高?
 */
public class TestDay10 {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入n");
		int n = scanner.nextInt();
		int sum = 100;// 本题将高度定位100
		int x = 100;
		int i;
		for (i = 1; i < n; i++) { // 3表示第三次落地
			x /= 2;
			sum = sum + x;
		}
		if (i == 1) {
			System.out.println("第" + n + "次落地反弹高度" + x / 2);
			System.out.println("第" + n + "次落地经过距离" + sum);
		} else {
			System.out.println("第" + n + "次落地反弹高度" + x); // 反弹高度
			System.out.println("第" + n + "次落地经过距离" + sum);
		} // 经过距离

	}

}

11、题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

分析:别想的太复杂,利用for循环嵌套。

/**
 *题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
 */
public class TestDay11 {

	public static void main(String[] args) {
		int count = 0;//用来统计最终结果的个数
		for (int i = 1; i < 5; i++) {
			for (int j = 1; j < 5; j++) {
				for (int k = 1; k < 5; k++) {
					if (i != j && i != k && j != k) {
						System.out.println(i + " " + j + " " + k);
						count++;
					}
				}
			}
		}
		System.out.println(count);

	}

}

12、题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%; 40万到60万之间时高于40万元的部分,可提成3%; 60万到100万之间时,高于60万元的部分,可提成1.5%, 高于100万元时,超过100万元的部分按1%提成, 从键盘输入当月利润I,求应发放奖金总数?

分析:算是数学应用题23333。

/**
 *企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;
 *         利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;
 *         20万到40万之间时,高于20万元的部分,可提成5%; 40万到60万之间时高于40万元的部分,可提成3%;
 *         60万到100万之间时,高于60万元的部分,可提成1.5%, 高于100万元时,超过100万元的部分按1%提成,
 *         从键盘输入当月利润I,求应发放奖金总数?
 */
public class TestDay12 {
	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		System.out.println("请输入月利润(万):");
		int I = s.nextInt(); // 键盘输入利润I
		if (I <= 10) {
			System.out.println(I * 0.1 + "万");
		}
		if (I > 10 && I <= 20) {
			System.out.println(1 + (I - 10) * 0.075 + "万");
		}
		if (I > 20 && I <= 40) {
			System.out.println(1.75 + (I - 20) * 0.05 + "万");
		}
		if (I > 40 && I <= 60) {
			System.out.println(2.75 + (I - 40) * 0.03 + "万");
		}
		if (I > 60 && I <= 100) {
			System.out.println(3.35 + (I - 60) * 0.015 + "万");
		}
		if (I > 100) {
			System.out.println(3.95 + (I - 100) * 0.01 + "万");
		}

	}
}

13、题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?(完全平方数:一个数=另一个数的平方,如121=11^11)。

分析:下面写的是在1-1000内找到符合题干要求的;for循环嵌套。

/**
 *题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
 */
public class TestDay13 {
	public static void main(String[] args) {
		int i = 0;
		for (i = 1; i <= 1000; i++) {
			for (int k = 1; k <= 100; k++) {
				if (i + 100 == k * k) {
					// System.out.println(i + " " + k);
					for (int j = 1; j < 100; j++) {
						if (i + 268 == j * j) {
							System.out.println(i);
						}
					}
				}
			}
		}

	}
}

14、题目:输入某年某月某日,判断这一天是这一年的第几天?

分析:注意平年和闰年。

/**
 *输入某年某月某日,判断这一天是这一年的第几天?
 */
public class TestDay14 {

	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		System.out.println("请输入年:");
		int year = s.nextInt();
		System.out.println("请输入月:");
		int month = s.nextInt();
		System.out.println("请输入日:");
		int day = s.nextInt();
		int sum = 0;
		int[] arr = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
		for (int i = 0; i < month - 1; i++) {
			sum += arr[i];
		}
		if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0 && month >= 3) {
			System.out.println(sum + day + 1);
		} else {
			System.out.println(sum + day);
		}

	}

}

15、题目:输入三个整数x,y,z,请把这三个数由小到大输出。

分析:程序里取巧利用了Arrays的一个现成方法直接进行从小到大排序,算是偷懒了。。。

/**
 *题目:输入三个整数x,y,z,请把这三个数由小到大输出。
 */
public class TestDay15 {
	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		System.out.println("請輸入整數x:");
		int x = s.nextInt();
		System.out.println("請輸入整數y:");
		int y = s.nextInt();
		System.out.println("請輸入整數z:");
		int z = s.nextInt();
		int[] arr = new int[3];
		arr[0] = x;
		arr[1] = y;
		arr[2] = z;
		Arrays.sort(arr); // 利用sort方法。。。。
		for (int i = 0; i <= 2; i++) {
			System.out.print(arr[i]+" ");
		}
	}
}

16、题目:输出打印9*9口诀表。

分析:for循环嵌套,可利用"\t"(制表符)使得输出好看些。

/**
 *输出9*9口诀
 */
public class TestDay16 {

	public static void main(String[] args) {
		for (int i = 1; i <= 9; i++) {
			for (int j = 1; j <= i; j++) {
				System.out.print(j + "*" + i + "=" + (j * i)+"\t");
			}
			System.out.println();
		}
	}
}

17、题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾, 又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。 以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。 求第一天共摘了多少。

分析:利用递归。

/**
 *题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,
 *         又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
 *         以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。 求第一天共摘了多少。
 */
public abstract class TestDay17 {
	public static void main(String[] args) {
		System.out.println("第一天摘了:" + fun(10, 1));
	}

	public static int fun(int day, int num) {
		if (day - 1 == 0) {
			return num;
		} else {
			System.out.println("第" + (day - 1) + "天未吃前早上一看还有: " + ((num + 1) * 2));
			return fun(day - 1, (num + 1) * 2);
		}
	}
}

18、题目:两个乒乓球队进行比赛,甲队派出a,b,c;乙队派出x,y,z三人,已抽签决定比赛名单,打听到a说他不和x比,c说他不和x,z比,请编程找出三队赛手的名单。

分析:①c说他不和x,z比,说明他只和y比; ②a说他不和x比,但是y和c比了,所以他肯定是和z比; ③那剩下的x就是和b比了

public class TestDay18 {
	public static void main(String[] args) {
		String a = null, b = null, c = null;// 甲队成员
		String[] racer = { "x", "y", "z" };// 乙队成员
		for (int i = 0; i < 3; i++) {
			for (int j = 0; j < 3; j++) {
				for (int k = 0; k < 3; k++) {
					if (i != j && i != k && j != k) {
						a = racer[i];
						b = racer[j];
						c = racer[k];
						if (!a.equals("x") && !c.equals("z") && !c.equals("x")) {
							if (a.equals(racer[i]) && b.equals(racer[j]) && c.equals(racer[k])) {
								System.out.println("a的对手是:" + racer[i] + ",\nb的对手是:" + racer[j] + ",\nc的对手是:" + racer[k]);
							}
						}
					}
				}
			}
		}
	}
}

19、题目:打印菱形。

分析:程序以”*“为例打印,找空格和星号之间的规律联系。

/**
 *题目:打印出如下图案(菱形):
   *		3个空格1个*
  ***		2个空格3个*
 *****		1个空格5个*
*******		0个空格7个*	中间最长必为奇数
 *****		1个空格5个*
  ***		2个空格3个*
   *		3个空格1个*
   			
 */
public class TestDay19 {

	public static void main(String[] args) {
		String str = "";
		int k = 7 / 2; // 控制上半部分空格时有用
		int q = 1; // 控制下半部分空格时有用
		for (int i = 1; i <= 7; i++) { // 控制上部分
			for (int m = k; m >= 1; m--) { // 控制空格
				System.out.print(" ");
			}
			k--;

			for (int j = i; j >= 1; j--) {// 控制打印*的个数
				str += "*";
			}
			System.out.println(str);
			str = ""; // 防止不断累积*
			i++;
		}
		for (int i = 5; i >= 1; i--) { // 控制下部分
			for (int n = 1; n <= q; n++) { // 空格
				System.out.print(" ");
				if (q == 4) {
					break;
				}
			}
			q++;

			for (int j = i; j >= 1; j--) { // 控制打印*的个数
				str += "*";
			}
			System.out.println(str);
			str = "";
			i--;
		}

	}

}

20、题目:有一分数序列: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项之和。
 * 
 *         程序分析:请抓住分子与分母的变化规律。分数:fraction
 */
public class TestDay20 {

	public static void main(String[] args) {
		double sum = 0;
		for (double i = 1; i <= 20; i++) {
			sum += (fun1(i) / fun2(i));
		}
		System.out.println(sum);

	}

	public static double fun1(double a) { // 递归处理分子
		if (a == 1) {
			return 2;
		}
		if (a == 2) {
			return 3;
		} else {
			return fun1(a - 2) + fun1(a - 1);
		}
	}

	public static double fun2(double a) { // 递归处理分母
		if (a == 1) {
			return 1;
		}
		if (a == 2) {
			return 2;
		} else {
			return fun2(a - 2) + fun2(a - 1);
		}
	}

}

21、题目:求1+2!+3!+…+20!的和。

分析:累乘后累加,阶乘处理。

/**
 *题目:求1+2!+3!+…+20!的和
 * 
 *         程序分析:累乘。
 */
public class TestDay21 {

	public static void main(String[] args) {
		long sum = 0;
		for (int i = 1; i <= 20; i++) {
			sum += fun(i);
		}
		System.out.println("1+2!+3!+…+20!的和:" + sum);
	}

	public static int fun(int a) {
		int s = 1;
		for (int i = a; a >= 1; a--) {
			s *= a;
		}
		return s;
	}

}

22、题目:利用递归方法求5!

分析:还是递归,理解了递归的奥妙就好处理了。

/**
 *题目:利用递归方法求5!。
 */
public class TestDay22 {
	public static void main(String[] args) {
		int sum = 1;
		sum *= fun(5);
		System.out.println(sum);
	}

	public static int fun(int a) {
		if (a != 1) {
			return a * fun(a - 1);
		} else {
			return 1;
		}
	}
}

### 23、题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。 问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁 。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?

分析:还是对递归的理解和使用。

/**
 *题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。
 *         问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁
 *         。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
 */
public class TestDay23 {

	public static void main(String[] args) {

		System.out.println("第五个人的岁数:" + GetAge(5, 2));

	}

	// 递归方法求第五个人的岁数

	private static int GetAge(int num, int ageMore) {

		if (num == 1) {// 第一个人岁数为10

			return 10;

		}

		return GetAge(num - 1, ageMore) + ageMore;// 每上一个人岁数加2

	}
}

24、题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

分析:参考程序使用.charAt方法。

/**
 *给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
 */
public class TestDay24 {
	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		System.out.println("请输入一个不多于5的正整数");
		String str = s.nextLine();
		int num = str.length();
		System.out.println("该数是" + num + "位数");
		String newstr = "";
		for (int i = str.length() - 1; i >= 0; i--) {
			newstr += str.charAt(i);
		}
		System.out.println("逆序打印:" + "" + newstr);
	}
}

25、题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。

题目:输入一个数,判断是否为回文数 如123321, 12321等。

分析:两头开始互相比较。

/**
 *输入一个数,判断是否为回文数 123321 12321
 */
public class TestDay25 {

	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		System.out.println("请输入一个数:");
		String str = s.nextLine();
		boolean flag = false;
		for (int i = 0, j = str.length() - 1; i < str.length() / 2; i++, j--) {
			char a = str.charAt(i);
			char b = str.charAt(j);
			if (a == b) {
				flag = true;
			} else {
				flag = false;
				break;
			}
		}
		System.out.println(flag);

	}

}

26、题目:请输入星期几的第一个字母来判断一下是星期几, 如果第一个字母一样,则继续判断第二个字母。

分析:switch case 语句,参考代码以小写字母为例。

/**
 *题目:请输入星期几的第一个字母来判断一下是星期几, 如果第一个字母一样,则继续判断第二个字母。
 */
public class TestDay26 {
	public static void main(String[] args) {

		System.out.println("请输入第一个英文字母:");

		Scanner scanner = new Scanner(System.in);

		String input = scanner.next();

		String input2 = "";

		switch (input) {

		case "m":

			System.out.println("Monday");

			break;

		case "t":

			System.out.println("请输入第二个字母:");

			input2 = scanner.next();

			if (input2.equals("u")) {

				System.out.println("Tuesday");

			} else if (input2.equals("h")) {

				System.out.println("Thursday");

			} else {

				System.out.println("你输入的字母有误!");

			}

			break;

		case "w":

			System.out.println("Wednesday");

			break;

		case "f":

			System.out.println("Friday");

			break;

		case "s":

			System.out.println("请输入第二个字母:");

			input2 = scanner.next();

			if (input2.equals("u")) {

				System.out.println("Sunday");

			} else if (input2.equals("a")) {

				System.out.println("Saturday");

			} else {

				System.out.println("你输入的字母有误!");

			}

			break;

		default:

			System.out.println("你输入的字母不正确!");

			break;

		}

		scanner.close();

	}

}

27、题目:求100以内的素数。

分析:素数老生常谈了。

/**
 * 题目:求100之内的素数
 */
public class TestDay27 {
	public static void main(String[] args) {
		for (int i = 2; i <= 100; i++) { // 被除数
			boolean flag = true;
			for (int j = 2; j < i; j++) { // 除数
				if (i % j == 0) {
					flag = false;
					break;
				}
			}
			if (flag == true) {
				System.out.println("素数有:" + i);
			}
		}
	}
}

28、题目:对10个数进行排序。

分析:for循环,比较交换。

/**
 *题目:对10个数进行排序
 */
public class TestDay28 {
	public static void main(String[] args) {
		int[] arr = { 7, 2, 3, 1, 9, 4, 6, 5, 8, 10 }; // 给十个数
		for (int j = 0; j < arr.length - 1; j++) {
			int max = arr[0];
			int temp = 0;
			for (int i = 1; i < arr.length; i++) {
				if (max > arr[i]) {
					temp = arr[i - 1];
					arr[i - 1] = arr[i];
					arr[i] = temp;
				} else {
					max = arr[i];
				}
			}
		}
		for (int i = 0; i < arr.length; i++) {
			System.out.println(arr[i]);
		}
	}
}

29、题目:求一个3*3矩阵对角线元素之和。

1 2 3 

4 5 6

7 8 9

分析:考察二维数组。

/**
 *题目:求一个3*3矩阵对角线元素之和
 * 1 2 3 
 * 4 5 6 
 * 7 8 9
 */
public class TestDay29 {
	public static void main(String[] args) {
		int sum = 0;
		int[][] arr = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
		for (int i = 0; i < arr.length; i++) {
			for (int j = 0; j < arr[i].length; j++) {
				if(i == j || i + j == 2) {	// 中间元素只加一遍!
				sum += arr[i][j];
				}
			}
		}
		System.out.println(sum);
	}
}

30、题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。

分析:考察数组元素交换,参考程序原数组排序规律为从大到小。

/**
 *有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
 */
public class TestDay30 {
	static int[] arr = { 9, 7, 6, 2, 1 };
	static int[] arr2 = new int[arr.length + 1];

	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		System.out.println("请输入一个数:");
		int num = s.nextInt(); // 从键盘接一个数
		// 放入新数组:
		arr2[0] = num;
		for (int i = 1, j = 0; i <= arr.length; i++, j++) {
			arr2[i] = arr[j];
		}

		if (arr[0] < arr[1]) { // 正序
			fun();
		} else { // 倒序
			fun2();
		}
	}

	// 正序排序操作:
	public static void fun() {
		for (int j = 0; j < arr2.length - 1; j++) {
			int max = arr2[0];
			int temp = 0;
			for (int i = 1; i < arr2.length; i++) {
				if (max > arr2[i]) {
					temp = arr2[i - 1];
					arr2[i - 1] = arr2[i];
					arr2[i] = temp;
				} else {
					max = arr2[i];
				}
			}
		}

		// 对加入新数字后的数组按原先规律操作完后输出查看
		for (int i = 0; i < arr.length + 1; i++) {
			System.out.print(arr2[i]+" ");
		}
	}

	// 倒序操作
	public static void fun2() {
		for (int j = 0; j < arr2.length - 1; j++) {
			int min = arr2[0];
			int temp = 0;
			for (int i = 1; i < arr2.length; i++) {
				if (min < arr2[i]) {
					temp = arr2[i - 1];
					arr2[i - 1] = arr2[i];
					arr2[i] = temp;
				} else {
					min = arr2[i];
				}
			}
		}
		// 对加入新数字后的数组按原先规律操作完后输出查看
		for (int i = 0; i < arr.length + 1; i++) {
			System.out.print(arr2[i]+" ");
		}
	}
}

31、题目:将一个数组逆序输出。

分析:还是考察数组元素交换。

/**
 *  将一个数组逆序输出
 */
public class TestDay31 {

	public static void main(String[] args) {
		int[] arr = { 6, 2, 4, 5, 3 };
		int temp = 0;
		for (int i = 0, j = arr.length - 1; i < arr.length / 2; i++, j--) {
			temp = arr[i];
			arr[i] = arr[j];
			arr[j] = temp;
		}
		for (int i = 0; i < arr.length; i++) {
			System.out.println(arr[i]);
		}
	}

}

32、题目:取一个整数a从右端开始的4~7位。

分析:将原来的整数到个序,转换后再求。

public class TestDay32 {
    public static void main(String[] args) {
        int a = 12345;
        String str = "";
        String str2 = "";
        str += a;
        for (int i = 0; i < str.length(); i++) {
            str2 = str.charAt(i) + str2; // 将原数倒个序
        }
        System.out.println(str2);
        for (int j = 3; j <= 6; j++) {
            System.out.println("第" + (j + 1) + "位為" + str2.charAt(j));// 当
        }
    }
}

33、题目:打印出杨辉三角形(要求打印出10行如下图)

1 ​ 1 1 ​ 1 2 1 ​ 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1


/**
*        1
​       1 1
​     1 2 1
​    1 3 3 1
   1 4 6 4 1
1 5 10 10 5 1 
*/
public class TestDay33 {
    public static void main(String[] args) {
        int[][] arr = new int[10][10];  //定义一个二维数组
        for (int i = 0; i < 10; i++) {
            for (int j = 0; j < i; j++) {
                if (i >= 2 && j > 0) {
                    arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];
                }
                arr[i][0] = 1;  //控制最左列和斜边为1
                if (i == j) {
                    arr[i][j] = 1;
                }
                System.out.println(arr[i][j] + " ");
            }
            System.out.println();
        }
    }
}

34、题目:输入3个数a,b,c,按大小顺序输出。

分析:稍微繁琐一点的数值比较。

import java.util.Scanner;

public class TestDay34 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请依次请输入三个个数:");
        int a = scanner.nextInt();
        int b = scanner.nextInt();
        int c = scanner.nextInt();
        if (a > b && a > c) {
            System.out.println(a + " ");
            if (b > c) {
                System.out.println(b + " " + c);
            } else {
                System.out.println(c + " " + b);
            }
        }
        if (b > a && b > c) {
            System.out.println(b + " ");
            if (a > c) {
                System.out.println(a + " " + c);
            } else {
                System.out.println(c + " " + a);
            }
        }
        if (c > b && c > a) {
            System.out.println(c + " ");
            if (b > a) {
                System.out.println(b + " " + a);
            } else {
                System.out.println(a + " " + b);
            }
        }
    }
}

35、题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。

分析:数组元素交换。

public class TestDay35 {
    public static void main(String[] args) {
        int[] arr = {5, 2, 6, 7, 3};  //初始化数组
        boolean flag = false;
        int max = arr[0], min = arr[0];
        int temp = 0;
        int i = 0;
        for (i = 1; i < arr.length; i++) {  //max
            if (max > arr[i]) {
                continue;
            } else {
                max = arr[i];
            }
        }
        for (i = 1; i < arr.length; i++) {  //min
            if (min < arr[i]) {
                continue;
            } else {
                min = arr[i];
            }
        }
        for (int j = 0; j < arr.length; j++) {  //change max
            if (arr[j] == max) {
                temp = arr[0];
                arr[0] = arr[j];
                arr[j] = temp;
            }
        }
        for (int j = 0; j < arr.length; j++) {   //change  min
            if (arr[j] == min) {
                temp = arr[arr.length - 1];
                arr[arr.length - 1] = arr[j];
                arr[j] = temp;
            }
        }
        System.out.println("max=" + max + " " + "min=" + min);
        System.out.println("处理后的结果为:");
        for (int k = 0; k < arr.length; k++) {
            System.out.println(arr[k]);
        }
    }
}

36、题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数。

分析:还是数组元素交换处理。

public class TestDay36 {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5};
        int[] arr2 = new int[5];
        for (int i = 0; i < arr.length; i++) {
            if (i + 2 > 4) {
                arr2[i + 2 - 5] = arr[i];
            } else {
                arr2[i + 2] = arr[i];
            }
        }
        for (int j = 0; j < arr2.length; j++) {
            System.out.println(arr2[j] + " ");
        }
    }
}

### 37、题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

分析:数组,循环。

public class TestDay37 {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5};
        int count = 0;
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] != 0) {
                count++;
            }
            if (count % 3 == 0 && arr[i] != 0) {
                arr[i] = 0;
            }
            if (i == 4) {
                i = -1;
            }
            if (count == 12) {
                break;
            }
        }
        for (int j = 0; j < arr.length; j++) {
            System.out.println(arr[j] + " ");
        }
    }
}

38、题目:写一个函数,求一个字符串的长度, 在main函数中输入字符串,并输出其长度。

分析:算实考察方法调用吧。。。

public class TestDay38 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入字符串:");
        String str = scanner.nextLine();
        System.out.println("字符串长度为:" + fun(str));
    }

    private static int fun(String str) {
        int length = str.length();
        return length;
    }
}

39、题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+…+1/n, 当输入n为奇数时,调用函数1/1+1/3+…+1/n(利用指针函数)。

分析:注意int和double吧。

public class TestDay39 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个数:");
        int num = scanner.nextInt();
        System.out.println(fun(num));
    }

    private static double fun(int num) {
        double sum = 0;
        if (num % 2 == 0) {
            for (int i = 2; i <= num; i += 2) {
                sum += (double) 1 / i;
            }
            return sum;
        } else {
            for (int i = 1; i <= num; i += 2) {
                sum += (double) 1 / i;
            }
            return sum;
        }
    }
}

### 40、题目:按字符串的长度和字母ASKII顺序排序。

分析:compareTo方法的使用。 

public class TestDay40 {
    public static void main(String[] args) {
        String[] str = {"fb", "abaac", "abaa", "fc", "fa"};
        for (int i = str.length - 1; i >= 1; i++) {
            for (int j = 0; j <= i - 1; j++) {
                if (str[j].compareTo(str[j + 1]) < 0) {
                    String temp = str[j];
                    str[j] = str[j + 1];
                    str[j + 1] = temp;
                }
            }
            for (String subStr : str)
                System.out.println(subStr + " ");
            System.out.println();
        }
    }
}

41、题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个, 这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份, 又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?

分析:还是递归的理解和使用。

public class TestDay41 {
    public static void main(String[] args) {
        fun(5, 6);
    }

    private static void fun(int monkynum, int peachnum) {
        if (monkynum != 0) {
            fun(monkynum - 1, peachnum * 5 + 1);
            System.out.println(monkynum + " " + peachnum);
        } else {
            System.out.println(monkynum + " " + peachnum);
        }
    }
}

42、题目:809??=800??+9??+1 ??代表两位数;8??的结果为两位数,9??的结果为三位数。 求??代表的两位数,及809??后的结果。

分析:算是数学题吧。

public class TestDay42 {
    public static void main(String[] args) {
        int x;
        for (x = 0; ; x++) {
            if (x >= 1.25 && x < 12.5 && 9 * x >= 100 && 9 * x < 1000) {
                System.out.println(x);
                break;
            }
        }
        System.out.println(809 * x);
    }
}

43、题目:求0-7所能组成的奇数的个数。

分析:下面参考程序为简单粗暴的for循环

public class TestDay43 {
    static int[] arr = {0, 1, 2, 3, 4, 5, 6, 7};

    public static void main(String[] args) {
        long count = 0;
        int I = 10000000, J = 1000000, K = 100000, M = 10000, N = 1000, X = 100, Y = 10;
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr.length; j++) {
                for (int k = 0; k < arr.length; k++) {
                    for (int m = 0; m < arr.length; m++) {
                        for (int n = 0; n < arr.length; n++) {
                            for (int x = 0; x < arr.length; x++) {
                                for (int y = 0; y < arr.length; y++) {
                                    for (int z = 0; z < arr.length; z++) {
                                        long a = arr[i] * I + arr[j] * J + arr[k] * K + arr[m] * M + arr[n] * N + arr[x] * X + arr[y] * Y + arr[z];
                                        if (a % 2 == 1) {
                                            count++;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        System.out.println(count);
    }
}

44、题目:一个偶数总能表示为两个素数之和。

分析:基本还是算考察素数。

public class TestDay44 {
    public static void main(String[] args) {
        int num = 20;   //一个偶数
        int[] arr = new int[num];   //定义一个数组放找到的所有素数
        int k = 0;  //控制数组下标
        /**
         * 求num以内的所有素数:
         */
        boolean flag = true;
        for (int a = 0; a < num; a++) {
            for (int i = 2; i < a; i++) {
                if (a % i == 0) {
                    flag = false;
                    break;
                }
            }
            if (flag) {
                System.out.println(a);  //打印看看有哪些是素数
                arr[k] = a;
                k++;//   是素数放进数组
            } else {
                flag = true;
            }
        }
        System.out.println("-----------------");
        
        /**
         * 遍历查看数组中的素数并寻找满足加和为偶数的两个素数:
         */
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr.length; j++) {
                System.out.println(arr[i] + " " + arr[j]);
            }
        }
    }
}

45、题目:字符串连接。

分析:字符串直接通过+号连接。

public class TestDay45 {
    public static void main(String[] args) {
        String s1 = "Hello";
        String s2 = "World";
        String s3 = s1 + s2;
        System.out.println(s3);
    }
}

46、题目:输入一个数(1-50),程序打印该数数量的*号。

分析:方法调用,for循环。

public class TestDay46 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个1-50的数:");
        int num = scanner.nextInt();
        fun(num);
    }

    private static void fun(int num) {
        for (int i = 1; i <= num; i++) {
            System.out.println("*----" + i);
        }
    }
}

47、题目:计算字符串中子串出现的次数。

分析:下面参考程序使用了charAt()方法。

public class TestDay47 {
    public static void main(String[] args) {
        int count = 0;
        String string = "Hello World! How are you?";
        for (int i = 0; i < string.length(); i++) {
            if (string.charAt(i) == ' ') {
                count++;
            }
        }
        System.out.println(count);
    }
}

48、题目:输入一个整数后打印(金字塔):假如输入4打印如下:

1

121

12321

1234321

分析:找规律,注意空格即可。

public class TestDay48 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个数:");
        int n = scanner.nextInt();
        for (int i = 1; i < n; i++) {   //控制行数
            for (int j = n - i; j >= 0; j--) {   //控制空格
                System.out.println(' ');
            }
            for (int k = 1; k <= 1; k++) {    //控制正序
                System.out.println(k);
            }
            for (int q = i - 1; q >= 1; q--) {   //控制倒序
                System.out.println(q);
            }
            System.out.println();
        }
    }
}

49、题目:输入一个整数打印,假如输入4打印如下:

1 2 3 4

8 7 6 5

9 10 11 12

16 15 14 13

分析:找规律,注意走S型。

public class TestDay49 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个数:");
        int n = scanner.nextInt();            //获取行数
        int x = 0, k;
        for (int i = 0; i < n; i++) {         //控制行数
            if (i == 1) {                     //控制第一行
                for (int j = 1; j <= n; j++) {
                    System.out.println(j + "\t");
                    x = j;
                }
            }
            if (i != 1 && i % 2 == 0) {     //控制双数行
                for (k = x + n; k >= x + 1; k--) {
                    System.out.println(k + "\t");
                }
                x = k + n;
            }
            if (i != 1 && i % 2 == 1) {  //控制单数行
                for (k = x + 1; k <= x + n; k++) {
                    System.out.println(k + "\t");
                }
                x = k - 1;
            }
            System.out.println();
        }
    }
}

50、题目:有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出平均成绩,况原有的数据和计算出的平均分数存放在磁盘文件"stud"中。

public class TestDay50 {
    //定义学生模型
    String[] number = new String[5];
    String[] name = new String[5];
    float[][] grade = new float[5][3];
    float[] sum = new float[5];

    public static void main(String[] args) throws IOException {
        TestDay50 stud = new TestDay50();
        stud.input();
        stud.output();
    }

    private void input() throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        boolean isRecord = true;
        while (isRecord) {
            try {
                for (int i = 0; i < 5; i++) {
                    System.out.println("请输入学号:");
                    number[i] = br.readLine();
                    System.out.println("请输入名字:");
                    name[i] = br.readLine();
                    for (int j = 0; j < 3; j++) {
                        System.out.println("请输入第" + (j + 1) + "门课成绩:");
                        grade[i][j] = Integer.parseInt(br.readLine());
                    }
                    System.out.println();
                    sum[i] = grade[i][0] + grade[i][1] + grade[i][2];
                }
                isRecord = false;
            } catch (NumberFormatException e) {
                System.out.println("请输入一个数字:");
            }
        }
    }

    /**
     * 输出文件
     */
    private void output() throws IOException {
        FileWriter fw = new FileWriter("D://java50//stud.txt");
        BufferedWriter bw = new BufferedWriter(fw);
        bw.write("No. " + "Name " + "grade1 " + "grade2 " + "grade3 " + "average");
        bw.newLine();
        for (int i = 0; i < 5; i++) {
            bw.write(number[i]);
            bw.write(" " + name[i]);
            for (int j = 0; j < 3; j++) {
                bw.write(" " + grade[i][j]);
                bw.write(" " + (sum[i] / 5));
                bw.newLine();
            }
            bw.close();
        }
    }
}

你可能感兴趣的:(java,算法,数据结构,intellij-idea)