JAVA练习题

1:

/**
 * 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子, 小兔子长到第三个月后每个月又生一对兔子, 假如兔子都不死,问每个月的兔子对数为多少?
 * 程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....
 * 
 * @author super
 *
 */
public class Test {

	public static void main(String[] args) {
		for (int i = 1; i <= 20; i++) {
			System.out.println("第" + i + "个月的兔子总数为:" + Rabbit(i));
		}

	}

	// 递归处理
	public static int Rabbit(int n) {
		// 前两个月兔子总数各为1
		if (n == 1 || n == 2) {
			return 1;
		} else {
			// 第三个月开始,每个月兔子总数为上个月和上上个月的和
			return Rabbit(n - 1) + Rabbit(n - 2);
		}
	}

}

输出:

第1个月的兔子总数为:1

第2个月的兔子总数为:1

第3个月的兔子总数为:2

第4个月的兔子总数为:3

第5个月的兔子总数为:5

第6个月的兔子总数为:8

第7个月的兔子总数为:13

第8个月的兔子总数为:21

第9个月的兔子总数为:34

第10个月的兔子总数为:55

第11个月的兔子总数为:89

第12个月的兔子总数为:144

第13个月的兔子总数为:233

第14个月的兔子总数为:377

第15个月的兔子总数为:610

第16个月的兔子总数为:987

第17个月的兔子总数为:1597

第18个月的兔子总数为:2584

第19个月的兔子总数为:4181

第20个月的兔子总数为:6765

2:

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

public class Test {

	public static void main(String[] args) {
		GetSuShu(101, 200);

	}

	/***
	 * 获取a,b之间的所有素数并统计输出
	 * 
	 * @param a
	 *            起始数字
	 * @param b
	 *            结束数字
	 */
	public static void GetSuShu(int a, int b) {
		// 统计素数个数
		int count = 0;
		// 外循环遍历既定数字范围
		for (int i = a; i <= b; i++) {
			// 新建一个判断变量
			boolean flag = true;
			// 从2开始到自身依次相除判断是否素数
			for (int j = 2; j < i; j++) {
				// 如果不是素数则改为false并跳出内循环
				if (i % j == 0) {
					flag = false;
					break;
				}
			}
			// 如果遍历结束确定是素数则统计并输出
			if (flag) {
				count++;
				System.out.println("第" + count + "个素数:" + i);
			}
		}
	}
}

输出:

第1个素数:101

第2个素数:103

第3个素数:107

第4个素数:109

第5个素数:113

第6个素数:127

第7个素数:131

第8个素数:137

第9个素数:139

第10个素数:149

第11个素数:151

第12个素数:157

第13个素数:163

第14个素数:167

第15个素数:173

第16个素数:179

第17个素数:181

第18个素数:191

第19个素数:193

第20个素数:197

第21个素数:199

3:

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

public class Test {

	public static void main(String[] args) {
		// 打印水仙花数
		// 某个n位数字每一位的n次方相加等于n
		// 1^3+5^3+3^=1+125+27=153
		int ShuiSum = 0;
		for (int i = 0; i < 1000; i++) {
			if (i == Math.pow(i % 10, 3) + Math.pow(i / 100, 3) + Math.pow(i / 10 - (i / 100) * 10, 3)) {
				// 个位数字 百位数字 十位数字
				System.out.println(i);
				ShuiSum++;
			}
		}
		System.out.println("共有水仙花数" + ShuiSum + "个");
	}
}

输出:

0

1

153

370

371

407

共有水仙花数6个

4:

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

程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:

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

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

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

Test1:

public class Test {

	public static void main(String[] args) {
		// 给定一个测试的数字
		int n = 120;
		// 先输出一个 “120=”
		System.out.print(n + "=");
		// 从2开始遍历该数字的质数
		for (int i = 2; i <= n; i++) {
			// 如果能整除,是质数则继续
			if (n % i == 0) {
				// 是否相同
				if (n == i) {
					// 如果相同则仅输出数字并跳出循环
					System.out.print(i);
					break;
				}
				// 如果不相同说明还可能有后续质数,更新n的值
				n /= i;
				// 输出 当前质数i 并加上* 号
				System.out.print(i + "*");

				// 由于获取最小质数后可能还有相同的一个最小质数,所以需要回滚i变量
				// 由于每次获取到的肯定是当前最小的质数,所以只需要回滚1就可以了
				i--;
			}
		}
	}
}

输出:

120=2*2*2*3*5

Test2:

public classProg4{
    public static void main(String[] args){
        int n = 13;
        decompose(n);
    }
    private static void decompose(int n){
        System.out.print(n+"=");
        for(int i=2;i<n+1;i++){
            while(n%i==0 && n!=i){
                n/=i;
                System.out.print(i+"*");
            }
            if(n==i){
                System.out.println(i);
                break;
            }
        }
    }
}

5

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

程序分析:(a>b)?a:b这是条件运算符的基本例子。

Test:

public class Test {

	public static void main(String[] args) {
		int score = 46;
		String grade = score >= 90 ? "A" : score >= 60 ? "B" : "C";
		System.out.println(grade);
	}
}

输出:

C

Test2:

public class Prog5{
       publicstatic void main(String[] args){
              intn = -1;
              try{
                     n= Integer.parseInt(args[0]);
              }catch(ArrayIndexOutOfBoundsExceptione){
                     System.out.println("请输入成绩");
                     return;
              }
              grade(n);
       }
       //成绩等级计算
       privatestatic void grade(int n){
              if(n>100|| n<0)
                System.out.println("输入无效");
              else{
                String str = (n>=90)?"分,属于A等":((n>60)?"分,属于B等":"分,属于C等");
                System.out.println(n+str);
              }
       }
}

6:

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

Test:

public class Test {

	public static void main(String[] args) {
		int a = 120;
		int b = 90;
		System.out.println(a + "和" + b + "的最大公约数为:" + GetGongYue(a, b));
		System.out.println(a + "和" + b + "的最小公倍数为:" + GetGongBei(a, b));
	}

	/***
	 * 获取两个正整数的最大公约数
	 * 
	 * @param a
	 *            参数
	 * @param b
	 *            参数
	 * @return 两个数的最大公约数
	 */
	public static int GetGongYue(int a, int b) {
		// 初始化最大公约数为较小数字
		int gongYue = (a < b ? a : b);
		// 从较小数字开始向下遍历,满足添加即赋值并跳出循环
		for (int i = gongYue;; i--) {
			if (a % i == 0 && b % i == 0) {
				gongYue = i;
				break;
			}
		}
		return gongYue;
	}

	/***
	 * 获取两个正整数的最小公倍数
	 * 
	 * @param a
	 *            参数
	 * @param b
	 *            参数
	 * @return 两个数字的最小公倍数
	 */
	public static int GetGongBei(int a, int b) {
		// 初始化最小公倍数为较大数字
		int gongBei = (a > b ? a : b);
		// 向上遍历满足条件即赋值并跳出循环
		for (int i = gongBei;; i++) {
			if (i % a == 0 && i % b == 0) {
				gongBei = i;
				break;
			}
		}
		return gongBei;
	}
}

输出:

120和90的最大公约数为:30

120和90的最小公倍数为:360

Test2:

public classProg6{
    public static void main(String[] args){
        int m,n;
        try{
            m = Integer.parseInt(args[0]);
            n = Integer.parseInt(args[1]);
        }catch(ArrayIndexOutOfBoundsExceptione){
            System.out.println("输入有误");
            return;
        }
        max_min(m,n);
    }
    //求最大公约数和最小公倍数
    private static void max_min(int m, int n){
        int temp = 1;
        int yshu = 1;
        int bshu = m*n;
        if(n<m){
            temp = n;
            n = m;
            m = temp;
        }
        while(m!=0){
            temp = n%m;
            n = m;
            m = temp;
        }
        yshu = n;
        bshu /= n;
        System.out.println(m+"和"+n+"的最大公约数为"+yshu);
        System.out.println(m+"和"+n+"的最小公倍数为"+bshu);
    }
}

7:

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

public class Test {

	public static void main(String[] args) {
		Check("sfs4564 4564fdg 4564gfd456 $%dgdf^%&%&");
		System.out.println("--------------------------");
		Check("sfs4564 4564fdg 4564gfd456 $%dgdf^%&%&");
	}

	// 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
	private static void Check(String s) {
		int enNum = 0;
		int nuNum = 0;
		int kongNum = 0;
		int othNum = 0;
		// 转换成字符数组遍历
		char[] chs = s.toCharArray();
		for (int i = 0; i < chs.length; i++) {
			// 如果是数字
			if (Character.isDigit(chs[i])) {
				nuNum++;
				// 是否字母
			} else if (Character.isLetter(chs[i])) {
				enNum++;
				// 是否空格
			} else if (chs[i] == ‘ ‘) {
				kongNum++;
			} else {
				// 其他字符
				othNum++;
			}
		}
		System.out.println("数字字符数量为:" + nuNum);
		System.out.println("字母字符数量为:" + enNum);
		System.out.println("空格字符数量为:" + kongNum);
		System.out.println("其他字符数量为:" + othNum);
	}

	//调用字符串charAt()方法遍历
	private static void Check2(String s) {
		int enNum = 0;
		int nuNum = 0;
		int kongNum = 0;
		int othNum = 0;
		for (int i = 0; i < s.length(); i++) {
			if (Character.isDigit(s.charAt(i))) {
				nuNum++;
			} else if (Character.isLetter(s.charAt(i))) {
				enNum++;
			} else if (s.charAt(i) == ‘ ‘) {
				kongNum++;
			} else {
				othNum++;
			}
		}
		System.out.println("数字字符数量为:" + nuNum);
		System.out.println("字母字符数量为:" + enNum);
		System.out.println("空格字符数量为:" + kongNum);
		System.out.println("其他字符数量为:" + othNum);
	}
}

输出:

数字字符数量为:15

字母字符数量为:13

空格字符数量为:3

其他字符数量为:7

--------------------------

数字字符数量为:15

字母字符数量为:13

空格字符数量为:3

其他字符数量为:7

Test2:

importjava.util.Scanner;
public classProg7_1{
    public static void main(String[] args){
        System.out.print("请输入一串字符:");
        Scanner scan = new Scanner(System.in);
        String str = scan.nextLine();//将一行字符转化为字符串
        scan.close();
        count(str);
    }
    //统计输入的字符数
    private static void count(String str){
        String E1 ="[\u4e00-\u9fa5]";//汉字
        String E2 = "[a-zA-Z]";
        String E3 = "[0-9]";
        String E4 = "\\s";//空格
        int countChinese = 0;
        int countLetter = 0;
        int countNumber = 0;
        int countSpace = 0;
        int countOther = 0;
        char[] array_Char = str.toCharArray();//将字符串转化为字符数组
        String[] array_String = newString[array_Char.length];//汉字只能作为字符串处理
        for(int i=0;i<array_Char.length;i++)
         array_String[i] = String.valueOf(array_Char[i]);
        //遍历字符串数组中的元素
        for(String s:array_String){
            if(s.matches(E1))
             countChinese++;
            else if(s.matches(E2))
             countLetter++;
            else if(s.matches(E3))
             countNumber++;
            else if(s.matches(E4))
             countSpace++;
            else
             countOther++;
        }
        System.out.println("输入的汉字个数:"+countChinese);
        System.out.println("输入的字母个数:"+countLetter);
        System.out.println("输入的数字个数:"+countNumber);
        System.out.println("输入的空格个数:"+countSpace);
        System.out.println("输入的其它字符个数:"+countSpace);
    }
}
importjava.util.*;
public classProg7_2{
    public static void main(String[] args){
     System.out.println("请输入一行字符:");
     Scanner scan = new Scanner(System.in);
     String str = scan.nextLine();
     scan.close();
     count(str);
    }
    //统计输入的字符
    private static void count(String str){
        List<String> list = newArrayList<String>();
        char[] array_Char = str.toCharArray();
        for(char c:array_Char)
         list.add(String.valueOf(c));//将字符作为字符串添加到list表中
        Collections.sort(list);//排序
        for(String s:list){
            int begin = list.indexOf(s);
            int end = list.lastIndexOf(s);
            //索引结束统计字符数
            if(list.get(end)==s)
             System.out.println("字符‘"+s+"’有"+(end-begin+1)+"个");
        }
    }
}

8:

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

程序分析:关键是计算出每一项的值。

public class Test {

	public static void main(String[] args) {

		for (int i = 1; i < 10; i++) {
			System.out.println(Sum(2, i));
		}
	}

	/***
	 * 特殊求和方法 求s=a+aa+aaa+aaaa+aa...a的值
	 * 
	 * @param a
	 *            要做相加操作的数字
	 * @param count
	 *            相加的次数
	 * @return 总和
	 */
	private static int Sum(int a, int count) {
		// 求和变量
		int sum = 0;
		// 临时变量
		int temp = a;
		// 经历count次求和
		for (int i = 0; i < count; i++) {
			// 第一次的和即a的值
			sum += temp;
			// 之后的值每次更新为a上一次的值乘10再加上a
			temp = temp * 10 + a;
		}
		return sum;
	}
}

Test2:

importjava.util.Scanner;
 
public classProg8{
    public static void main(String[] args){
        System.out.print("求s=a+aa+aaa+aaaa+...的值,请输入a的值:");
        Scanner scan = newScanner(System.in).useDelimiter("\\s*");//以空格作为分隔符
        int a = scan.nextInt();
        int n = scan.nextInt();
        scan.close();//关闭扫描器
        System.out.println(expressed(2,5)+add(2,5));
    } 
    //求和表达式
    private static String expressed(int a,intn){
        StringBuffer sb = new StringBuffer();
        StringBuffer subSB = new StringBuffer();
        for(int i=1;i<n+1;i++){
         subSB = subSB.append(a);
         sb = sb.append(subSB);
         if(i<n)
           sb = sb.append("+");
        }
        sb.append("=");
        return sb.toString();
    }
    //求和
    private static long add(int a,int n){
        long sum = 0;
        long subSUM = 0;
        for(int i=1;i<n+1;i++){
            subSUM = subSUM*10+a;
            sum = sum+subSUM;
        }
        return sum;
    }
}

9:

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

Test:

public class CeShi {
	/**
	 * 题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		WanShu(1000);
	}

	/***
	 * 
	 * @param n
	 */
	private static void WanShu(int n) {
		int count = 0;
		// 从1到给定的数字n遍历
		for (int i = 1; i <= n; i++) {
			// 待用变量
			int temp = 0;
			// 内循环从1到n/2获取各个最小质数
			for (int j = 1; j <= n / 2; j++) {
				// 判断是否当前数字的质数
				if (i % j == 0) {
					// 如果是质数就累加
					temp += j;
					// 如果质数累加的结果和当前数字相同,则判定为完数并输出
					if (temp == i) {
						System.out.println(i);
						count++;
					}
				}
			}

		}
		System.out.println(n + "以内共有" + count + "个完数");
	}
}

输出:

1

6

24

28

496

1000以内共有5个完数

10:

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

Test:

public class CeShi {
	/**
	 * 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半; 再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高?
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		for (int i = 1; i <= 10; i++) {
			GetHeight(i);
			System.out.println("------------------------------");
		}

	}

	private static void GetHeight(int count) {
		// 统计第count次弹起时经过的距离
		double sum = 0.0;
		// 统计第count次下落时经过的距离
		double sum2 = 0.0;
		// 原始高度
		double height = 100.0;

		for (int i = 1; i <= count; i++) {
			// 每次弹起时经过的距离为下落时高度的1.5倍
			sum += height + height / 2;
			// 当达到第count次时,弹起时的总距离减去最后一次弹起的高度即为第count次下落时经过的距离
			if (i == count) {
				sum2 = sum - height / 2;
				System.out.println("第" + count + "次时弹起的高度为:" + height / 2);
			}
			// 每弹起一次,起始下落高度减半
			height /= 2;

		}
		System.out.println("第" + count + "次落下时经过的距离是:" + sum2 + "米。");
		System.out.println("第" + count + "次弹起时经过的距离是:" + sum + "米。");
	}
}

输出:

第1次时弹起的高度为:50.0

第1次落下时经过的距离是:100.0米。

第1次弹起时经过的距离是:150.0米。

------------------------------

第2次时弹起的高度为:25.0

第2次落下时经过的距离是:200.0米。

第2次弹起时经过的距离是:225.0米。

------------------------------

第3次时弹起的高度为:12.5

第3次落下时经过的距离是:250.0米。

第3次弹起时经过的距离是:262.5米。

------------------------------

第4次时弹起的高度为:6.25

第4次落下时经过的距离是:275.0米。

第4次弹起时经过的距离是:281.25米。

------------------------------

第5次时弹起的高度为:3.125

第5次落下时经过的距离是:287.5米。

第5次弹起时经过的距离是:290.625米。

------------------------------

第6次时弹起的高度为:1.5625

第6次落下时经过的距离是:293.75米。

第6次弹起时经过的距离是:295.3125米。

------------------------------

第7次时弹起的高度为:0.78125

第7次落下时经过的距离是:296.875米。

第7次弹起时经过的距离是:297.65625米。

------------------------------

第8次时弹起的高度为:0.390625

第8次落下时经过的距离是:298.4375米。

第8次弹起时经过的距离是:298.828125米。

------------------------------

第9次时弹起的高度为:0.1953125

第9次落下时经过的距离是:299.21875米。

第9次弹起时经过的距离是:299.4140625米。

------------------------------

第10次时弹起的高度为:0.09765625

第10次落下时经过的距离是:299.609375米。

第10次弹起时经过的距离是:299.70703125米。

------------------------------

Test2:

importjava.util.Scanner;
public classProg10{
    public static void main(String[] args){
        System.out.print("请输入小球落地时的高度和求解的次数:");
        Scanner scan = newScanner(System.in).useDelimiter("\\s");
        int h = scan.nextInt();
        int n = scan.nextInt();
        scan.close();
        distance(h,n);
    }
    //小球从h高度落下,经n次反弹后经过的距离和反弹的高度
    private static void distance(int h,int n){
        double length = 0;
        for(int i=0;i<n;i++){
            length += h;
            h /=2.0 ;
        }
        System.out.println("经过第"+n+"次反弹后,小球共经过"+length+"米,"+"第"+n+"次反弹高度为"+h+"米");
    }
}
时间: 2024-08-06 07:59:17

JAVA练习题的相关文章

20140314 java练习题-打印各种图形

1.打印直角三角形 import java.util.Scanner; public class AgeDemo { public static void main(String[] args){ //打印一个倒立的直角三角形如下: //**** //*** //** //* Scanner sc = new Scanner(System.in); System.out.println("请输入边长:"); int a = sc.nextInt(); for(int j=a;j>

Java练习题4_last_1042林大锐格平台

import java.util.Scanner; public class Main{ public static void main(String args[]){ int ri , repeat; int n; Scanner in = new Scanner(System.in); repeat = in.nextInt(); for(ri = 1 ; ri <= repeat ; ri++){ n=in.nextInt(); dectobin(n); } } static void d

Java练习题4_last-1_1043林大锐格平台

import java.util.Scanner; public class Main{ public static void main(String[] args){ int m , n; Scanner in = new Scanner(System.in); m = in.nextInt(); n = in.nextInt(); System.out.println(Min(m,n)); } static int Min(int a,int b){ if(a<=b)return a; el

Java练习题4_3_2407林大锐格平台

import java.util.Scanner; class Rectangular { private static int x, y; private static int countP = 0; public Rectangular(int xx, int yy) { x=xx; y=yy; } public Rectangular(Rectangular p) { x=p.x; y=p.y; } public int getX() { return x; } public int ge

java练习题:现给出二组字符串,比较他们看是否相等

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.StringTokenizer; /** * 假设字符串类似这样的aba和aab就相等,现在随便给你二组字符串,请编程比较他们看是否相等 * */public class EqualDemo { public static void main(String[] args) { //先读

Java练习题_Map 利用Map,完成下面的功能: 从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队。

从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队. 历届世界杯冠军 届数 举办年份 举办地点 冠军 第一届 1930年 乌拉圭 乌拉圭 第二届 1934年 意大利 意大利 第三届 1938年 法国 意大利 第四届 1950年 巴西 乌拉圭 第五届 1954年 瑞士 西德 第六届 1958年 瑞典 巴西 第七届 1962年 智利 巴西 第八届 1966年 英格兰 英格兰 第九届 1970年 墨西哥 巴西 第十届 1974年 前西德 西德 第十一届 1978年 阿根廷 阿根廷 第

《java练习题》习题集三

[程序21]题目:求1+2!+3!+…+20!的和 [程序22]题目:利用递归方法求5!. /** * [程序21] * 题目:求1+2!+3!+…+20!的和 * [程序22] * 题目:利用递归方法求5!. */ public class Subject21And22 { public static void main(String[] args) { int sum = factorialSum(20); System.out.println("1+2!+3!+…+20!之和:"

《Java练习题》习题集五

[程序41]题目:求0,1,2,3,4,5,6,7所能组成的8位奇数个数. /** * [程序41] * 题目:求0,1,2,3,4,5,6,7所能组成的8位奇数个数. */ public class Subject41 { public static void main(String[] args) { int[] arr = new int[]{0,1,2,3,4,5,6,7}; compose(arr); } /** * 获取:0—7所能组成的奇数个数 */ private static

《Java练习题》进阶练习题(三)

前言:不仅仅要实现,更要提升性能,精益求精,用尽量少的时间复杂度和空间复杂度解决问题. [程序68]将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. public class ListNode { int val; ListNode next; ListNode(){ } ListNode(int x) { val = x; } } /** * 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. */ publ

《Java练习题》进阶练习题(五)

前言:不仅仅要实现,更要提升性能,精益求精,用尽量少的时间复杂度和空间复杂度解决问题. [程序88]给定一个未排序的整数数组,找出其中没有出现的最小的正整数. /** * 给定一个未排序的整数数组,找出其中没有出现的最小的正整数. */ public class Subject88 { public static void main(String[] args) { int[] arrInt = new int[]{-1,-9,1,2,4,6,9,8}; int number = new Sub