Java练习题一(基础50题)

【程序1】
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
//这是一个菲波拉契数列问题

import java.util.Scanner;

public class Demo1{
	
	public static void main(String[] args){
		
		System.out.println("请输入你想要输入的月份:");
		Scanner sc = new Scanner(System.in);
		
		int month = sc.nextInt(); // 月份
		int count = f(month) * 2; // 数量
		
		System.out.println(month + "个月后,兔子总数为:" + count);
	}
	
	// 递归:计算n个月后,兔子的对数
	public static int f(int n){
		
		if(n == 1 || n == 2){
			return 1;
		} else if(n > 2){ 
			return (f(n - 1) + f(n - 2));
		}
		return 0;
	}
}

【程序2】
题目:判断101-200之间有多少个素数,并输出所有素数。
程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。

public class Demo2{
	
	public static void main(String[] args){
		
		System.out.println("101-200之间的素数");
		method();
	}
	
	// 判断101-200之间有多少个素数,并输出所有素数。
	public static void method(){
		
		int count = 0;
		for(int i = 101;i < 200;i += 2){
			boolean flag = false;
			for(int j = 2;j <= Math.sqrt(i);j++){
				
				if(i % j == 0){
					flag = false;
					break;
				} else {
					flag = true;
				}
			}
			
			if(flag){
				System.out.print(i + "\t");
				count++;
			}
		}
		
		System.out.println();
		System.out.println("101-200之间有" + count + "个素数");
	}
}

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

public class Demo3{
	
	public static void main(String[] args){
		
		System.out.println("打印出所有的 \"水仙花数 \"");
		method();
	}
	
	// 打印出所有的 "水仙花数 "
	public static void method(){
		
		int num; // 数
		int sum; // 和
		for(int i = 1;i <= 9;i++){
			for(int j = 0;j <= 9;j++){
				for(int k = 0;k <= 9;k++){
					num = i * 100 + j * 10 + k;
					sum = i * i * i + j * j * j + k * k * k;
					if(num == sum){
						System.out.print(num + "\t");
					}
				}
			}
 		}
	}
}

【程序4】
题目:将一个正整数分解质因数。例如:输入90,打印出90=233*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n <> k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

import java.util.Scanner;

public class Demo4{
	
	public static void main(String[] args){
		
		System.out.println("请输入你想要分解的正整数:");
		Scanner sc = new Scanner(System.in);
		int num = sc.nextInt();
		System.out.print(num + "=");
		method(num);
	}
	
	// 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。???
	public static void method(int n){
	
		int k = 2;
		while(n > k){
			if(n % k == 0){
				System.out.print(k + "*");
				n /= k;
			} else {
				k++;
			}
		}
		System.out.println(k);		
	}
}

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

import java.util.Scanner;

public class Demo5{
	
	public static void main(String[] args){
		
		System.out.println("请输入你的分数:");
		Scanner sc = new Scanner(System.in);
		int score = sc.nextInt();
		method(score);
	}
	
	// 输出学习成绩等级
	public static void method(int score){
		
		if(score >= 90){
			System.out.println("A");
		} else if(score >= 60 && score < 90){
			System.out.println("B");
		} else if(score < 60){
			System.out.println("C");
		}
		
	}
}

【程序6】
题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
/*在循环中,只要除数不等于0,用较大数除以较小的数,将小的一个数作为下一轮循环的大数,取得的余数作为下一轮循环的较小的数,如此循环直到较小的数的值为0,返回较大的数,此数即为最大公约数,最小公倍数为两数之积除以最大公约数。 /

import java.util.Scanner;

public class Demo6{
	
	public static void main(String[] args){
		
		System.out.println("请输入两个正整数m和n:");
		Scanner sc = new Scanner(System.in);
		System.out.print("m:");
		int m = sc.nextInt();
		System.out.print("n:");
		int n = sc.nextInt();
		int num1 = method(m,n); // 最大公约数
		int num2 = m * n / num1; // 最小公倍数
		System.out.println(num1);
		System.out.println(num2);
	}
	
	// 求其最大公约数和最小公倍数
	public static int method(int m,int n){
		
		int temp;
		// 让m为输入的两个数中的最大数
		if(m < n){
			temp = m;
			m = n;
			n = temp;
		}
		
		while(n != 0){
			if(m == n){
				return m;
			} else {
				int k = m % n;
				m = n;
				n = k;
			}
		}
		return m;
	}
}

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

import java.util.Scanner;

public class Demo7{
	
	public static void main(String[] args){
		
		System.out.println("请输入一行字符:");
		Scanner sc = new Scanner(System.in);
		String s = sc.nextLine(); // next()和nextLine()的区别
		method(s);
	}
	
	// 统计出其中英文字母、空格、数字和其它字符的个数
	public static void method(String s){
		
		int word = 0;
		int space = 0;
		int digital = 0;
		int other = 0;
		char[] c = s.toCharArray();
		for(int i = 0;i < c.length;i++){
			if((c[i] >= 'A' && c[i] <= 'Z') || (c[i] >= 'a' && c[i] <= 'z')){
				word++;
			} else if(c[i] == ' '){
				space++;
			} else if(c[i] >= '0' && c[i] <= '9'){
				digital++;
			} else {
				other++;
			}
		}
		
		System.out.println("数字个数是:" + word);
		System.out.println("空格个数是:" + space);
		System.out.println("英文个数字母是:" + digital);
		System.out.println("其他字符是:" + other);
	}
}

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

import java.util.Scanner;

public class Demo8{
	
	public static void main(String[] args){
		
		System.out.println("求s=a+aa+aaa+aaaa+aa...a的值");
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入a的值:");
		int a = sc.nextInt();
		System.out.println("请输入个数n的值:");
		int n = sc.nextInt();
		int s = method(a,n);
		System.out.println(s);
	}
	
	// 求s=a+aa+aaa+aaaa+aa...a的值
	public static int method(int a,int n){
		
		int count = 0; // 计数器
		int s = 0; // 和
		while(count < n){
			s += a;
			a += a * 10;
			count++;
		}
		return s;
	}
}

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

public class Demo9{
	
	public static void main(String[] args){
		
		System.out.println("1000以内的所有完数");
		method();
	}
	
	// 1000以内的所有完数
	public static void method(){
		
		for(int i = 1;i <= 1000;i++){
			int temp = 0;
			for(int j = 1;j < i;j++){
				if(i % j == 0){
					temp += j;
				}
			}
			
			if(i == temp){
				System.out.print(i + "\t");
			}
		}
	}
}

【程序10】
题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高?

public class Demo10{
	
	public static void main(String[] args){
		
		System.out.println("10次落地时,共经过多少米?第10次反弹多高?");
		int n = 10; // 次数
		method(n);
	}
	
	// 10次落地时,共经过多少米?第10次反弹多高?
	public static void method(int n){
		
		float s = 100.0f; //小球第一次落地经过的距离
		float h = 50.0f; //小球第一次反弹的高度
		for(int i = 2;i <= 10;i++){
			s += h * 2;
			h /= 2;
		}
		System.out.println(n + "次落地时,共经过" + s + "米,第10次反弹" + h + "米");
	}
}

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

public class Demo11{
	
	public static void main(String[] args){
		
		System.out.println("有1、2、3、4四个数字,能组成多少个互不相同且无重复数字的三位数?都是多少????");
		int count = method();
		System.out.println();
		System.out.println("能组成" + count + "个互不相同且无重复数字的三位数");
	}
	
	// 有1、2、3、4四个数字,能组成多少个互不相同且无重复数字的三位数
	public static int method(){
		
		int count = 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 && i != k){
						count++;
						System.out.print(i * 100 + j * 10 + k + "\t");
					}
				}
			}
		}
		return 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%提成,从键盘输入当月利润,求应发放奖金总数?

import java.util.Scanner;

public class Demo12{
	
	public static void main(String[] args){
		
		System.out.println("企业发放的奖金根据利润提成");
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入利润:" + "万元");
		double profit = sc.nextDouble(); //利润
		double bonus = method(profit); //奖金
		System.out.println("奖金为:" + bonus + "万元");
		
	}
	
	// 企业发放的奖金根据利润提成
	public static double method(double profit){
		
		double bonus = 0;
		if(profit <= 10){
			bonus = profit * 0.1;
		} else if(profit > 10 && profit <= 20){
			bonus = (profit - 10) * 0.075 + 1;
		} else if(profit > 20 && profit <= 40){
			bonus = (profit - 20) * 0.05 + 1.75;
		} else if(profit > 40 && profit <= 60){
			bonus = (profit - 40) * 0.03 + 2.75;
		} else if(profit > 60 && profit <= 100){
			bonus = (profit - 60) * 0.015 + 3.35;
		} else if(profit > 100){
			bonus = (profit - 100) * 0.01 + 3.95;
		}
		
		return bonus;
	}
}

【程序13】
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

public class Demo13{
	
	public static void main(String[] args){
		
		System.out.println("一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数");
		int num = method();
		System.out.println(num);
	}
	
	// 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数
	public static int method(){
		
		int num = 0; // 所求整数
		boolean flag = false;
		while(!flag){
			num++;
			
			int x = (int)Math.sqrt(num + 100);
			int y = (int)Math.sqrt(num + 268);
			
			
			if(x * x == (num + 100) && y * y == (num + 268)){
				flag = true;
			}
			
		}
		return num;
	}
}

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

import java.util.Scanner;

public class Demo14{
	
	public static void main(String[] args){
		
		System.out.println("输入某年某月某日,判断这一天是这一年的第几天");
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入年份:");
		int year = sc.nextInt();
		System.out.println("请输入月份:");
		int month = sc.nextInt();
		System.out.println("请输入天:");
		int day = sc.nextInt();
		int days = method(year,month,day); 
		System.out.println("这一天是" + year + "年的第" + days + "天");
	}
	
	// 输入某年某月某日,判断这一天是这一年的第几天
	public static int method(int year,int month,int day){
		
		int days = day; // 第几天
		for(int i = 1;i < month;i++){
			
			switch(i){
			
				case 1:
				case 3:
				case 5:
				case 7:
				case 8:
				case 10:
				case 12:
					days += 31;
					break;
				case 4:
				case 6:
				case 9:
				case 11:
					days += 30;
					break;
				case 2:
					//判断是否闰年
					if((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)){
						days += 29;
					} else {
						days += 28;
					}
				default:
					break;
			}
		}
		
		return days;
		
	}
}

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

import java.util.Scanner;

public class Demo15{
	
	public static void main(String[] args){
		
		System.out.println("输入三个整数x,y,z,请把这三个数由小到大输出");
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入x:");
		int x = sc.nextInt();
		System.out.println("请输入y:");
		int y = sc.nextInt();
		System.out.println("请输入z:");
		int z = sc.nextInt();
		method(x,y,z); 
	}
	
	// 输入三个整数x,y,z,请把这三个数由小到大输出(冒泡排序)
	public static void method(int x,int y,int z){
		int[] a = { x, y, z };
		int temp = x;
		for(int i = 0;i < a.length - 1;i++){
			for(int j = 0;j < a.length - 1 - i;j++){
				if(a[j] > a[j + 1]){
					temp = a[j];
					a[j] = a[j + 1];
					a[j + 1] = temp;
				}
			}
		}
		
		for(int i = 0;i < a.length;i++){
			System.out.print(a[i] + " ");
		}
	}
}

【程序16】
题目:输出9*9口诀。

public class Demo16{
	
	public static void main(String[] args){
		
		System.out.println("输出9*9口诀");
		method(); 
	}
	
	// 输出9*9口诀
	public static void method(){
		for(int i = 1;i <= 9;i++){
			for(int j = 1;j <= i;j++){
				System.out.print(i + " * " + j + " = " + i*j + "\t");
			}
			System.out.println();
		}
	}
}

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

public class Demo17{
	
	public static void main(String[] args){
		
		System.out.println("猴子吃桃问题:");
		method(); 
	}
	
	// 猴子吃桃问题:
	public static void method(){
		int count = 1; //数量
		for(int i = 1;i < 10;i++){
			count = (count + 1) * 2;
		}
		System.out.println("第一天共摘了" + count);
	}
}

【程序18】
题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。

public class Demo18{

    public static void main(String[] args){

        System.out.println("两个乒乓球队进行比赛");
        method();
    }

    // 两个乒乓球队进行比赛
    public static void method(){
        for(char a = 'x';a <= 'z';a++){
            for (char b = 'x';b <= 'z';b++){
                for (char c = 'x';c <= 'z';c++){
                    if(a != 'x' && c != 'x' && c != 'z' && a != b && a != c && b != c){
                        System.out.println("a vs " + a);
                        System.out.println("b vs " + b);
                        System.out.println("c vs " + c);
                    }
                }
            }
        }
    }
}

【程序19】
题目:打印出如下图案(菱形)

   *
  ***
 *****
*******
 *****
  ***
   *
public class Demo19{

    public static void main(String[] args){

        System.out.println("打印出如下图案(菱形)   ");
        method();
    }

    // 打印出如下图案(菱形)   
    public static void method(){

        for(int i = 1;i <= 4;i++){
            for(int j = 4 - i;j > 0;j--){
                System.out.print(" ");
            }

            for(int j = 1;j <= 2 * i - 1;j++){
                System.out.print("*");
            }
            System.out.println();
        }

        for(int i = 1;i < 4;i++){
            for(int j = 1;j <= i;j++){
                System.out.print(" ");
            }

            for(int j = 5;j >= 2 * i - 1;j--){
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

【程序20】
题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。

public class Demo20{

    public static void main(String[] args){

        System.out.println("求出这个数列的前20项之和");
        method();
    }

    // 求出这个数列的前20项之和   
    public static void method(){
        int x = 2; //分母
        int y = 1; //分子
        double sum = 0; //和
        for(int i = 1;i <= 20;i++){
            sum += (double)x / y;
            int temp = x;
            x += y;
            y = temp;
        }
        System.out.println(sum);
    }
}

【程序21】
题目:求1+2!+3!+…+20!的和

public class Demo21{

    public static void main(String[] args){

        System.out.println("求1+2!+3!+...+20!的和");
        long sum = method();
        System.out.println(sum);
    }

    // 求1+2!+3!+...+20!的和   
    public static long method(){
        long n = 1;
        long sum = 0;
        for(int i = 1;i <= 20;i++){
            n *= i;
            sum += n;
        }
        return sum;
    }
}

【程序22】
题目:利用递归方法求5!。

public class Demo22{

    public static void main(String[] args){

        System.out.println("利用递归方法求5!");
        int sum = method(5);
        System.out.println(sum);
    }

    // 利用递归方法求5!   
    public static int method(int num){
        if(num == 1){
            return 1;
        } else if(num > 1){
            return num * method(num - 1);
        }
        return 0;
    }
}

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

public class Demo23{

    public static void main(String[] args){

        System.out.println("第五个人多大?");
        int age = method(5);
        System.out.println(age);
    }

    // 第五个人多大? 
    public static int method(int num){
        if(num == 1){
            return 10;
        } else if(num > 1){
            return method(num - 1) + 2;
        }
        return 0;
    }
}

【程序24】
题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
//使用了长整型最多输入18位

import java.util.Scanner;

public class Demo24{

    public static void main(String[] args){

        System.out.println("一、求它是几位数,二、逆序打印出各位数字");
        Scanner sc = new Scanner(System.in);
        String num = sc.next();
        System.out.println("它是" + num.length() + "位数");
        System.out.println("逆序前:");
        System.out.println(num);
        num = method(num);
        System.out.println("逆序后:");
        System.out.println(num);
    }

    // 逆序打印出各位数字 
    public static String method(String num){

        String s = "";
        char[] ch = num.toCharArray();
        for (int i = num.length() - 1; i >= 0 ; i--) {
            s += ch[i];
        }
        return s;
    }
}

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

public class Demo25{

    public static void main(String[] args){

        System.out.println(method("12321"));
    }

    //题目:一个5位数,判断它是不是回文数  
    public static boolean method(String num){

        char[] a = num.toCharArray();
        if(a[0] == a[4] && a[1] == a[3]){
            return true;
        }
        return false;
    }
}

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

import java.util.Scanner;

public class Demo26{

    public static void main(String[] args){

        day();
    }

    //请输入星期几的第一个字母来判断一下是星期几
    public static void day(){

        Scanner sc = new Scanner(System.in);
        char c = sc.next().charAt(0);
        switch (c){
            case 'M':
                System.out.println("星期一");
                break;
            case 'T':
                char c1 = sc.next().charAt(0);
                if(c1 == 'u'){
                    System.out.println("星期二");
                } else if(c1 == 'h'){
                    System.out.println("星期四");
                } else {
                    System.out.println("输入有误!");
                }

                break;
            case 'W':
                System.out.println("星期三");
                break;
            case 'F':
                System.out.println("星期五");
                break;
            case 'S':
                char c2 = sc.next().charAt(0);
                if(c2 == 'a'){
                    System.out.println("星期六");
                } else if(c2 == 'u'){
                    System.out.println("星期日");
                } else {
                    System.out.println("输入有误!");
                }
                break;
            default:
                System.out.println("输入有误!");

        }
    }
}

【程序27】
题目:求100之内的素数

public class Demo27{

    public static void main(String[] args){

        primeNum(100);
    }

    //求100之内的素数
    public static void primeNum(int num){

        for (int i = 2; i < num; i++) {
            boolean flag = true;
            for(int j = 2;j <= Math.sqrt(i);j++){
                if(i % j == 0){
                    flag = false;
                    break;
                }
            }
            if(flag){
                System.out.print(i + "\t");
            }
        }
    }
}

【程序28】
题目:对10个数进行排序

public class Demo28{

    public static void main(String[] args){

        selSort(1,4,3,6,9,0,2,5,8,7);
    }

    //题目:对10个数进行排序  
    public static void selSort(int... a){

        for (int i = 0; i < a.length; i++) {
            int temp = i; //待定的位置
            for (int j = i + 1; j < a.length; j++) {
                if(a[j] < a[temp]){
                    temp = j;
                }
            }

            if(temp != i){
                int temp2 = a[i];
                a[i] = a[temp];
                a[temp] = temp2;
            }
        }

        for(int i = 0;i < a.length;i++){
            System.out.print(a[i] + " ");
        }
    }
}

【程序29】
题目:求一个3*3矩阵对角线元素之和

public class Demo29{

    public static void main(String[] args) {

        int[][] a = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
        System.out.println(add(a));
    }

    //求一个3*3矩阵对角线元素之和    
    public static int add(int[][] a){

        int sum1 = 0;
        int sum2 = 0;
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
                if(i == j){
                    sum1 += a[i][j];
                }
                if(i + j == 2){
                    sum2 += a[i][j];
                }
            }
        }
        return (sum1 + sum2);
    }
}

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

public class Demo30{

    public static void main(String[] args) {

        int[] a = { 1, 2, 3, 5 };
        int[] b = insert(a,4);
        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i] + " ");
        }
        System.out.println();
        System.out.println("-------插入----------");
        for (int i = 0; i < b.length; i++) {
            System.out.print(b[i] + " ");
        }
        System.out.println();
        System.out.println("-------删除----------");
        int[] c = delete(a,1);
        for (int i = 0; i < c.length; i++) {
            System.out.print(c[i] + " ");
        }
    }

    //有一个已经排好序的数组,插入一个数
    public static int[] insert(int[] a,int num){

        int[] b = new int[a.length + 1];

        if(num > a[a.length - 1]){
            b[a.length + 1] = num;
            for(int i = 0;i < a.length;i++) {
                b[i] = a[i];
            }
        } else {
            for(int i = 0;i < a.length;i++) {
                if(num < a[i]){
                    for(int j = 0;j < i;j++){
                        b[j] = a[j];
                    }

                    for(int k = i;k < a.length;k++){
                        b[k + 1] = a[k];
                    }
                    b[i] = num;
                    break;
                }
            }
        }
        return b;
    }

    //删除一个数
    public static int[] delete(int[] a,int index){
        int[] b = new int[a.length - 1];
        for (int i = 0; i < a.length; i++) {
            if(i < index){
                b[i] = a[i];
            } else if(i > index){
                b[i - 1] = a[i];
            }
        }
        return b;
    }
}

【程序31】
题目:将一个数组逆序输出。

public class Demo31{

    public static void main(String[] args) {

        int[] a = { 1, 2, 3, 4, 5 };
        reversed(a);

    }

    //将一个数组逆序输出。
    public static void reversed(int[] a){

        for (int i = a.length - 1;i >= 0;i--) {
            System.out.print(a[i] + " ");
        }
    }
}

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

public class Demo32{

    public static void main(String[] args) {

        fetch(12345678);
    }

    //取一个整数a从右端开始的4~7位。
    public static void fetch(int num){

        String s = "" + num;
        char[] c = s.toCharArray();
        for (int i = 3; i < 7; i++) {
            System.out.print(c[i]);
        }
    }
}

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

            1   
          1    1   
        1    2    1   
      1    3    3    1   
    1    4    6    4    1   
1    5    10    10    5    1   
…………
public class Demo33{

    public static void main(String[] args) {

        pTriangle(10);
    }

    //打印出杨辉三角形
    public static void pTriangle(int num){

        int[][] a= new int[num][num];
        for (int i = 0; i < num; i++) {
            for(int j = num - i; j > 0; j--){
                System.out.print(" ");
            }

            for(int j = 0; j < i; j++){
                if(i == j || j == 0){
                    a[i][j] = 1;
                } else {
                    a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
                }
                System.out.print(a[i][j] + " ");
            }
            System.out.println();
        }
    }
}

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

public class Demo34{

    public static void main(String[] args) {

        sort(3, 5, 4);
    }

    //输入3个数a,b,c,按大小顺序输出。
    public static void sort(int... a){

        int temp;
        for (int i = 0; i < a.length - 1; i++) {
            for (int j = 0; j < a.length - 1 - i; j++) {
                if(a[j] > a[j + 1]){
                    temp = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = temp;
                }
            }
        }

        for (int e: a) {
            System.out.print(e + "\t");
        }
    }
}

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

public class Demo35{

    public static void main(String[] args) {

        exchange(3, 4, 8, 5, 0, 2);
    }

    //输入数组,最大的与第一个元素交换,最小的与最后一个元素交换
    public static void exchange(int... a){

        int indexMax = 0;
        int indexMin = 0;
        for (int i = 0; i < a.length; i++) {
            if(a[indexMax] < a[i]){
                indexMax = i;
            }

            if(a[indexMin] > a[i]){
                indexMin = i;
            }

        }

        int temp = a[0];
        a[0] = a[indexMax];
        a[indexMax] = temp;

        int temp2 = a[a.length - 1];
        a[a.length - 1] = a[indexMin];
        a[indexMin] = temp2;

        for (int e: a) {
            System.out.print(e + "\t");
        }
    }
}

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

public class Demo36{

    public static void main(String[] args) {

        exchange(1,1, 2, 3, 4);
    }

    //有n个整数,使其前面各数顺序向后移m个位置
    public static void exchange(int m, int... a){

        int[] b = new int [a.length];

        for (int i = 0; i < m; i++) {
            b[i] = a[a.length - m + i];
        }
        for (int i = m,j = 0; i < a.length; i++,j++) {
            b[i] = a[j];
        }

        for (int e:b) {
            System.out.print(e + "\t");
        }
    }
}

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

import java.util.Scanner;

public class Demo37 {
    
    public static void main(String[] args) {
        
        Scanner s = new Scanner(System.in);
        System.out.print("请输入排成一圈的人数:");
        int n = s.nextInt();
        boolean[] arr = new boolean[n];
        for(int i=0; i<arr.length; i++) {
            arr[i] = true;
        }
        int leftCount = n;
        int countNum = 0;
        int index = 0;
        while(leftCount > 1) {
            if(arr[index] == true) {
                countNum ++;
                if(countNum == 3) {
                    countNum =0;
                    arr[index] = false;
                    leftCount --;
                }
            }
            index ++;
            if(index == n) {
                index = 0;
            }
        }
        for(int i=0; i<n; i++) {
            if(arr[i] == true) {
                System.out.println("原排在第"+(i+1)+"位的人留下了。");
            }
        }
    }
}

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

import java.util.Scanner;

public class Demo38{

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        System.out.println(length(s));
    }

    //输出其长度
    public static int length(String s){

        char[] c = s.toCharArray();
        return c.length;
    }
}

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

public class Demo39{

    public static void main(String[] args) {

        System.out.println(add(6));
    }

    //编写一个函数
    public static double add(int num){

        if(num == 1){
            return 1.0;
        } else if(num == 2) {
            return (double)1 / 2;
        } else {
            return add(num - 2) + (double)1 / num;
        }
    }
}

【程序40】
题目:字符串排序。

public class Demo40{

    public static void main(String[] args) {

        sort("asdf");
    }

    //字符串排序
    public static void sort(String s){

        char[] c = s.toCharArray();
        for (int i = 0; i < c.length - 1; i++) {
            for (int j = 0; j < c.length - 1 -i; j++) {
                if(c[j] > c[j + 1]){
                    char temp = c[j];
                    c[j] = c[j + 1];
                    c[j + 1] = temp;
                }
            }
        }

        for (int i = 0; i < c.length; i++) {
            System.out.print(c[i]);
        }
    }
}

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

public class Demo41 {
    
    public static void main (String[] args) {

        int i,m,j=0,k,count;
        for(i=4;i<10000;i+=4)
        { count=0;
            m=i;
            for(k=0;k<5;k++)
            {
                j=i/4*5+1;
                i=j;
                if(j%4==0)
                    count++;
                else break;
            }
            i=m;
            if(count==4)
            {System.out.println("原有桃子 "+j+" 个");
                break;}
        }
    }
}

【程序42】
题目:809*??=800*??+9*??+1 其中??代表的两位数,8*??的结果为两位数,9*??的结果为3位数。求??代表的两位数,及809*??后的结果。
//题目错了!809x=800x+9x+1 这样的方程无解。去掉那个1就有解了。

public class Demo42{

    public static void main(String[] args) {

        solution();
    }

    //809*??=800*??+9*??+1
    public static void solution(){

        int number = 0;
        boolean flag = false;

        for (int i = 10; i < 100; i++) {
            if((809 * i) == (800 * i + 9 * i + 1)){

                if ((8 * i < 100) && (9 * i >= 100)){

                    number = i;
                    flag =true;
                }
            }
        }

        if(flag){
            System.out.println(809 * number);
        } else {
            System.out.println("无解!");
        }
    }
}

【程序43】
题目:求0—7所能组成的奇数个数。
//组成1位数是4个。
//组成2位数是74个。
//组成3位数是7
84个。
//组成4位数是7
884个。
//…

public class Demo43{

    public static void main(String[] args) {

        System.out.println(form(3));
    }

    //求0—7所能组成的奇数个数
    public static int form(int num){

        if(num == 1){
            return 4;
        } else if(num == 2){
            return form(num - 1) * 7;
        } else if(num > 2){
            return form(num - 1) * 8;
        }

        return 0;
    }
}

【程序44】
题目:一个偶数总能表示为两个素数之和。

public class Demo44{

    public static void main(String[] args) {

        guess(10);
    }

    //一个偶数总能表示为两个素数之和
    public static void guess(int num){

        for (int i = 2; i <= num / 2; i++) {
            if(primeNum(i) && primeNum(num - i)){
                System.out.println(num + " = " + i + " + " + (num - i));
            }
        }
    }

    //一个偶数总能表示为两个素数之和
    public static boolean primeNum(int num){

        for (int i = 2; i <= Math.sqrt(num); i++) {
            if(num % i == 0){
                return false;
            }
        }
        return true;
    }
}

【程序45】
题目:判断一个素数能被几个9整除
//题目错了吧?能被9整除的就不是素数了!所以改成整数了。

public class Demo45{

    public static void main(String[] args) {

        judge(81);
    }

    //判断一个整数能被几个9整除   
    public static void judge(int num){

        int count = 0;
        if(num % 9 != 0){
            System.out.println("该数不能被9整除!");
            return;
        }
        while (num >= 9){
            num /= 9;
            count++;
        }
        System.out.println(count);
    }

}

【程序46】
题目:两个字符串连接程序

public class Demo46{

    public static void main(String[] args) {

        System.out.println(connect("abc","def"));
    }

    //两个字符串连接程序 
    public static String connect(String s1,String s2){

        return s1 + s2;
    }

}

【程序47】
题目:读取7个数(1—50)的整数值,每读取一个值,程序打印出该值个数的*。

import java.util.Random;

public class Demo47{

    public static void main(String[] args) {

        read(7);
    }

    //读取7个数(1—50)的整数值
    public static void read(int num){

        Random r = new Random();
        for (int i = 0; i < num; i++) {
            print(r.nextInt(50) + 1);
        }
    }

    //打印出该值个数的*
    public static void print(int num){

        System.out.println(num);
        for (int i = 0; i < num; i++) {
            System.out.print("*");
        }
        System.out.println();
    }

}

【程序48】
题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。

public class Demo48{

    public static void main(String[] args) {

        System.out.println(encrypt(1234));
    }

    //加密
    public static String encrypt(int num){

        String a = (num / 1000 + 5) % 10 + ""; //千位
        String b = (num % 1000 / 100 + 5) % 10 + ""; //百位
        String c = (num % 100 / 10 + 5) % 10 + ""; //十位
        String d = (num % 10 + 5) % 10 + ""; //个位

        return d + c + b + a;
    }
}

【程序49】
题目:计算字符串中子串出现的次数

import java.util.*;
public class Demo49 {

    public static void main(String args[]){

        Scanner s = new Scanner(System.in);
        System.out.print("请输入字符串:");
        String str1 = s.nextLine();
        System.out.print("请输入子串:");
        String str2 = s.nextLine();
        int count=0;
        if(str1.equals("")||str2.equals(""))
        {
            System.out.println("你没有输入字符串或子串,无法比较!");
            System.exit(0);
        }
        else
        {
            for(int i=0;i<=str1.length()-str2.length();i++)
            {
                if(str2.equals(str1.substring(i, str2.length()+i)))
                    //这种比法有问题,会把"aaa"看成有2个"aa"子串。
                    count++;
            }
            System.out.println("子串在字符串中出现: "+count+" 次");
        }
    }
}

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

import java.io.*;
import java.util.*;
public class Demo50 {

    public static void main(String[] args){

        Scanner ss = new Scanner(System.in);
        String [][] a = new String[5][6];
        for(int i=1; i<6; i++) {
            System.out.print("请输入第"+i+"个学生的学号:");
            a[i-1][0] = ss.nextLine();
            System.out.print("请输入第"+i+"个学生的姓名:");
            a[i-1][1] = ss.nextLine();
            for(int j=1; j<4; j++) {
                System.out.print("请输入该学生的第"+j+"个成绩:");
                a[i-1][j+1] = ss.nextLine();
            }
            System.out.println("\n");
        }
        //以下计算平均分
        float avg;
        int sum;
        for(int i=0; i<5; i++) {
            sum=0;
            for(int j=2; j<5; j++) {
                sum=sum+ Integer.parseInt(a[i][j]);
            }
            avg= (float)sum/3;
            a[i][5]=String.valueOf(avg);
        }
        //以下写磁盘文件
        String s1;
        try {
            File f = new File("C:\\stud");
            if(f.exists()){
                System.out.println("文件存在");
            }else{
                System.out.println("文件不存在,正在创建文件");
                f.createNewFile();//不存在则创建
            }
            BufferedWriter output = new BufferedWriter(new FileWriter(f));
            for(int i=0; i<5; i++) {
                for(int j=0; j<6; j++) {
                    s1=a[i][j]+"\r\n";
                    output.write(s1);
                }
            }
            output.close();
            System.out.println("数据已写入c盘文件stud中!");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_33591873/article/details/107355817
今日推荐