《Java练习题》Java习题集二
编程合集: https://www.cnblogs.com/jssj/p/12002760.html
Java总结:https://www.cnblogs.com/jssj/p/11146205.html
【程序11】
题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
/** * 【程序11】 * 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? */ public class Subject11 { public static void main(String[] args) { FormThreeNum(); } public static void FormThreeNum(){ 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){ System.out.println("1,2,3,4可以组成的三位数:"+i+j+k); } } } } } }
运行结果:
。。。。。。。
【程序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,求应发放奖金总数?
/** * 【程序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,求应发放奖金总数? */ public class Subject12 { public static void main(String[] args) { System.out.println("请输入您的业绩:"); Scanner scanner = new Scanner(System.in); double profit= scanner.nextDouble(); System.out.println("您得到的提成为:"+premium(profit)); } public static double premium(double profit){ double premium = 0; if(profit <= 100000){ premium = profit*0.1; }else if(profit > 100000 && profit <= 200000){ premium = (profit - 100000) * 0.075 + premium(100000); }else if(profit > 200000 && profit <= 400000){ premium = (profit - 200000) * 0.05 + premium(200000); }else if(profit > 400000 && profit <= 600000){ premium = (profit - 400000) * 0.03 + premium(400000); }else if(profit > 600000 && profit <= 1000000){ premium = (profit - 600000) * 0.015 + premium(600000); }else{ premium = (profit - 1000000) * 0.01 + premium(1000000); } return premium; } }
运行结果:
【程序13】
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
/** * 【程序13】 * 题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? */ public class Subject13 { public static void main(String[] args) { squareNum(); } public static void squareNum(){ int i = 1; while(true){ int tmp = i*i; int z = 1; while(true){ if(z*z - tmp >=168){ break; } z++; } if(z*z - i*i == 168 && (z*z - 168-100)>=0){ System.out.println("一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,则该数为:"+(z*z - 168-100)); break; }else{ i++; } } } }
运行结果:
【程序14】
题目:输入某年某月某日,判断这一天是这一年的第几天?
/** * 【程序14】 * 题目:输入某年某月某日,判断这一天是这一年的第几天? */ public class Subject14 { public static void main(String[] args) { dayNum("2018-03-08"); dayNum("1900-03-08"); dayNum("2000-03-08"); dayNum("2020-03-08"); dayNum("2018-02-08"); dayNum("1900-02-08"); dayNum("2000-02-08"); dayNum("2020-02-08"); } public static void dayNum(String date){ String[] dateStr = date.split("-"); int dayNum = 0; if(leapYear(dateStr[0])){ dayNum = month(dateStr[1] ,"1") + Integer.parseInt(dateStr[2]); }else{ dayNum = month(dateStr[1] ,"0") + Integer.parseInt(dateStr[2]); } System.out.println("输入日期为该("+dateStr[0]+")年的第"+dayNum+"天"); } /** * 根据年份判断闰年还是普通年 * @param year * @return */ public static boolean leapYear(String year){ int years = Integer.parseInt(year); if((years%4 ==0 && years%100!=0) || years%400 == 0){ return true; } return false; } /** * 根据月份获取天数 * @param month * @param flag * @return */ public static int month(String month,String flag){ int dayNum = 0; switch (month){ case "01": dayNum = 0; break; case "02": dayNum = month("01", flag) +31; break; case "03": if("0".equals(flag)) { dayNum = month("02", flag) + 28; }else { dayNum = month("02", flag) + 29; } break; case "04": dayNum = month("03", flag) + 31; break; case "05": dayNum = month("04", flag) + 30; break; case "06": dayNum = month("05", flag) + 31; break; case "07": dayNum = month("06", flag) + 30; break; case "08": dayNum = month("07", flag) + 31; break; case "09": dayNum = month("08", flag) + 31; break; case "10": dayNum = month("09", flag) + 30; break; case "11": dayNum = month("10", flag) + 31; break; case "12": dayNum = month("11", flag) + 30; break; } return dayNum; } }
运行结果:
【程序15】
题目:输入三个整数x,y,z,请把这三个数由小到大输出
/** * 【程序15】 * 题目:输入三个整数x,y,z,请把这三个数由小到大输出 */ public class Subject15 { public static void main(String[] args) { minNum(7,3,5); } /** * 获取最小数 * @param a * @param b * @param c */ public static void minNum(int a,int b,int c){ int tmp = 0; int[] nums= {a,b,c}; int[] numTmp = new int[3]; for(int i=0 ; i<2;i++){ for (int j = i+1; j <= 2; j++) { if(nums[j] < nums[i]){ tmp = nums[j]; nums[j] = nums[i]; nums[i] = tmp; } } } for (int i = 0; i < nums.length ; i++) { System.out.println(nums[i]); } } }
运行结果:
【程序16】
题目:输出9*9口诀。
/** * 【程序16】 * 题目:输出9*9口诀。 */ public class Subject16 { public static void main(String[] args) { for (int i = 1; i <= 9 ; i++) { for (int j = 1; j <= i ; j++) { System.out.print(i+"*"+j+"="+i*j+" "); } System.out.println(""); } } }
运行结果:
【程序17】
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
/** * 【程序17】 * 题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半, * 又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。 */ public class Subject17 { public static void main(String[] args) { System.out.println(peachNum(10)); } public static int peachNum(int days){ if(days == 1){ return 1; }else if(days > 1){ return (peachNum(days-1) + 1) * 2; } return 0; } }
运行结果:
【程序18】
题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
除了题目本身还扩展实现了,总共可以出现多少种组合
/** * 【程序18】 * 题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。 * a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。 * * 除了题目本身还扩展实现了,总共可以出现多少种组合 */ public class Subject18 { public static void main(String[] args) { List<Map> list = new ArrayList<>(); Map<Character, Character> map = new HashMap<>(); List<Character> a = new ArrayList<>(); a.add('a'); a.add('b'); a.add('c'); List<Character> b = new ArrayList<>(); b.add('x'); b.add('y'); b.add('z'); group(a,b,map,list); for(Map<Character, Character> maptmp:list){ boolean flag = true; for (Map.Entry<Character, Character> entry : maptmp.entrySet()) { /***将不满足条件的情况去除掉*****/ if(((entry.getKey() =='a' && 'x' == entry.getValue()) || ((entry.getKey() =='c' && 'x' == entry.getValue()) || (entry.getKey() =='c' && 'z' == entry.getValue())))){ flag = false; break; } } if(flag){ System.out.println("对决名单为:"); for (Map.Entry<Character, Character> entry : maptmp.entrySet()) { System.out.println("选手:"+entry.getKey() + " ----------VS------------ " + "选手:"+ entry.getValue()); } } } } /** * 将全部分组情况展示出来 * @param a * @param b * @param map * @param list */ public static void group(List<Character> a,List<Character> b,Map<Character, Character> map,List<Map> list){ for (int i = 0; i < a.size(); i++) { if (i == 1) { break; } for (int j = 0; j < a.size(); j++) { map.put(a.get(i), b.get(j)); //System.out.println(a.get(i) + "----" + b.get(j)); if(a.size() == 1){ Map<Character, Character> mapTrue = new HashMap<>(); mapCopy(map,mapTrue); list.add(mapTrue); //System.out.println(mapTrue); } List<Character> tmp1 = new ArrayList<>(); List<Character> tmp2 = new ArrayList<>(); listCopy(a,tmp1); listCopy(b,tmp2); tmp1.remove(a.get(i)); tmp2.remove(b.get(j)); group(tmp1,tmp2,map,list); } } } /** * 将paramsMap内容复制到resultMap中 * @param paramsMap * @param resultMap */ public static void mapCopy(Map paramsMap, Map resultMap) { if (resultMap == null) resultMap = new HashMap(); if (paramsMap == null) return; Iterator it = paramsMap.entrySet().iterator(); while (it.hasNext()) { Map.Entry entry = (Map.Entry) it.next(); Object key = entry.getKey(); resultMap.put(key, paramsMap.get(key) != null ? paramsMap.get(key) : ""); } } /** * 将paramsList内容复制到resultList中 * @param paramsList * @param resultList */ public static void listCopy(List paramsList,List resultList){ for (int k = 0; k < paramsList.size(); k++) { resultList.add(paramsList.get(k)); } } }
运行结果:
【程序19】
题目:打印出如下图案(菱形)
/** * 【程序19】 * 题目:打印出如下图案(菱形) */ public class Subject19 { public static void main(String[] args) { diamond(6); } /** * 打印菱形 */ public static void diamond(int a){ for (int i = a; i > 0; i--) { for (int j = 0; j < i; j++) { System.out.print(" "); } for (int j = 0; j < a-i; j++) { System.out.print("* "); } System.out.println(""); } for (int i = 0; i < a ; i++) { for (int j = 0; j < i; j++) { System.out.print(" "); } for (int j = 0; j < a-i; j++) { System.out.print("* "); } System.out.println(""); } } }
运行结果:
【程序20】
题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。
/** * 【程序20】 * 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。 */ public class Subject20 { public static void main(String[] args) { double sumNum = sum(20); System.out.println("前20规律数之和为:"+sumNum); } /** * 前num的数的和 * @param num */ public static double sum(int num){ if(num == 1){ return 2.0/1.0; }else{ double a = getMolecule(num); double b = getMolecule(num-1); return sum(num-1)+ a/b; } } /** * 按照规律获取分子 * @param num * @return */ public static double getMolecule(int num){ if(num == 1){ return 2.0; }else if(num == 2){ return 3.0; }else{ return getMolecule(num-1) + getMolecule(num-2); } } }
运行结果:
参考:https://blog.csdn.net/zzzzzzzhu/article/details/82355001