Java经典五十道题11到20题

来源:互联网 发布:淘宝呼死你哪里有卖 编辑:程序博客网 时间:2024/04/28 06:16
【程序11】 
题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 
1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。




【程序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,求应发放奖金总数? 
1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。




【程序13】FindNumber.java 
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? 
1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。请看具体分析:




【程序14】 
题目:输入某年某月某日,判断这一天是这一年的第几天? 
1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。




【程序15】
题目:输入三个整数x,y,z,请把这三个数由小到大输出。 
1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。




【程序16】 
题目:输出9*9口诀。 
1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列。




【程序17】MonkeyEatPeach.java 
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。 
1.程序分析:采取逆向思维的方法,从后往前推断。




【程序18】 
题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。 
1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。




【程序19】
题目:打印出如下图案(菱形) 
      * 
    *** 
  ***** 
******* 
  ***** 
    *** 
      * 
1.程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重 for循环,第一层控制行,第二层控制列。




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

1.程序分析:请抓住分子与分母的变化规律。

package javaimprove011;/* * 【程序11】 TestTN.java 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:这道题我不太理解这个题目,那么久简单以我的理解用1234这4个数字组成互相不重复数字的三位数并且输出,若是有不对,欢迎指正。 */public class Duplicate {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubfor(int i=1;i<5;i++)for(int j=1;j<5;j++){for(int k=1;k<5;k++){if(i!=j&&j!=k&&i!=k)System.out.printf("%d\t", 100*k+10*j+i);}System.out.println();}}}
package javaimprove012;import java.util.Scanner;/* * 【程序12】 MoneyAward.java 题目:企业发放的奖金根据利润提成。利润(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 Award {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubSystem.out.println("请输入当月利润(万元):");Scanner in=new Scanner(System.in);int profit=in.nextInt();System.out.printf("应发奖金为:%f万元", profit<=10?(profit*0.1):(profit<=20?10*0.1+(profit-10)*0.075:(profit<=40?10*0.1+10*0.075+(profit-20)*0.005:(profit<=60?10*0.1+10*0.075+20*0.005+(profit-40)*0.003:(profit<=100?10*0.1+10*0.075+20*0.005+20*0.003+(profit-60)*0.015:10*0.1+10*0.075+20*0.005+20*0.003+40*0.015+(profit-100)*0.01)))));}}

package javaimprove013;/* * 题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?  * 问题分析:正向一一尝试 */public class FindSpecial {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubfor(int n=1;n<100000000;n++){if(Math.sqrt(n+100)%1==0&&Math.sqrt(n+100+168)%1==0)System.out.println(n);}}}

package javaimprove014;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.GregorianCalendar;import java.util.Scanner;/* * 【程序14】 TestDay.java 题目:输入某年某月某日,判断这一天是这一年的第几天? 问题分析:Java有处理日期的calendar,这样程序就比较简单了。 */public class Day {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubSystem.out.println("请输入您所要查询的日期(格式:2007 09 10):");Scanner in=new Scanner(System.in);//SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");  Calendar calendar=Calendar.getInstance();//月份初始为0,所以为了得到我们需要的准确时间我们要在在这里减一int year=in.nextInt();calendar.set(year,in.nextInt()-1,in.nextInt());Date date=calendar.getTime();calendar.set(year,00,00);//这一年的0时开始Date begindate=calendar.getTime();//求之间的日期差long day=(date.getTime()-begindate.getTime())/(24*60*60*1000);System.out.printf("这是一年的第%d天\n",day);}}

package javaimprove015;import java.util.Arrays;import java.util.Scanner;/* * 题目:输入三个整数x,y,z,请把这三个数由小到大输出。 * 问题分析:Java中本身就有排序的方法可以直接调用,但是也可以自己想想有什么方法可以实现快速排序, * 在数据结构中有几种基础的算法大家可以了解一下。当然只有三个数,也就不谈什么优劣了。 */public class Sort {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubSystem.out.println("请输入三个整数:");Scanner in=new Scanner(System.in);int[] array=new int[3];array[0]=in.nextInt();array[1]=in.nextInt();array[2]=in.nextInt();Arrays.sort(array);//利用数组,直接进行排序。这在数据很少的时候直接使用比较简单。System.out.printf("%d,%d,%d",array[0],array[1],array[2]);}}

package javaimprove016;/* * 题目:输出9*9口诀。 */public class MultiplicationTable {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubfor(int i=1;i<10;i++){for(int j=1;j<10;j++)System.out.printf("%d*%d=%2d   ",j,i,i*j);System.out.println();}}}

package javaimprove017;/* * 题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾又多吃了一个  * 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。 * 以后每天早上都吃了前一天剩下的一半零一个。 * 到第10天早上想再吃时,见只剩下一个桃子了。 * 求第一天共摘了多少。 * 问题分析:假如知道了初始量,这就是个递归的问题,因此反向思考就可以了。还是个递归问题,哈哈哈。 * 当第十天的时候结束递归,这时候的量为1个。这猴子真能吃!!! */public class Monkey {public int peach(int peach,int day){if(day==1)return peach;return peach((peach+1)*2,day-1);}/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubMonkey monkey=new Monkey();System.out.printf("猴子第1天摘了%d个桃子。\n",monkey.peach(1, 10));System.out.printf("猴子第2天有%d个桃子。\n",monkey.peach(1, 9));System.out.printf("猴子第3天有%d个桃子。\n",monkey.peach(1, 8));System.out.printf("猴子第4天有%d个桃子。\n",monkey.peach(1, 7));System.out.printf("猴子第5天有%d个桃子。\n",monkey.peach(1, 6));System.out.printf("猴子第6天有%d个桃子。\n",monkey.peach(1, 5));System.out.printf("猴子第7天有%d个桃子。\n",monkey.peach(1, 4));System.out.printf("猴子第8天有%d个桃子。\n",monkey.peach(1, 3));System.out.printf("猴子第9天有%d个桃子。\n",monkey.peach(1, 2));System.out.printf("猴子第10天有%d个桃子。\n",monkey.peach(1, 1));}}

package javaimprove018;/* * 【程序18】 Prog.java 题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。问题分析:用矩阵的思想去解决 */public class PingPong {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubint[][] abcxyz=new int[3][3];for(int i=0;i<3;i++){for(int j=0;j<3;j++){if(i==0&&j==0||i==2&&j==0||i==2&&j==2)abcxyz[i][j]=0;elseabcxyz[i][j]=1;}}System.out.println("赛事安排如下:");for(int i=0;i<3;i++){for(int j=0;j<3;j++){if(abcxyz[i][j]==1){if(i==0){System.out.printf("a");}if(i==1){System.out.printf("b");}if(i==2){System.out.printf("c");}if(j==0){System.out.printf(" VS x\n");}if(j==1){System.out.printf(" VS y\n");}if(j==2){System.out.printf(" VS z\n");}}}}}}

package javaimprove019;import java.util.Scanner;/* * 【程序19】LingXing.java 题目:打印出如下图案(菱形)       *     ***   ***** *******   *****     ***       * 问题分析:在这里可以利用x,y也就是i,j的函数关系式来进行判断。在我的程序中可以看出对于本题中要画出图像:x(j)在坐标系中相当于平时的环境中的y,一次推导出菱形的四条边的表达式判断范围。 */public class Print {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubSystem.out.println("请输入菱形的高度:");Scanner in=new Scanner(System.in);int size=in.nextInt();if(size%2==0){size+=1;//奇数得到的图形会更加准确一点,另外,图形高度越大,得到的图形也越准确}for(int i=0;i<size;i++){for(int j=0;j<size;j++){if(i<=size/2&&j>=size/2-i&&j<=size/2+i){System.out.print("*");}else if(i>size/2&&j>=i-size/2&&j<=3*size/2-i){System.out.print("*");}else{System.out.print(" ");}}System.out.println();}System.out.println("--------------------------------");for(int i=0;i<size;i++){for(int j=0;j<size;j++){if(j<=size/2&&i>=size/2-j&&i<=size/2+j){System.out.print("*");}else{System.out.print(" ");}}System.out.println();}}}
package javaimprove020;/* * 【程序20】TestAdd2.java 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。 问题分析:找出分数序列的规律就可以了。 */public class Fraction {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubdouble up=2;double down=1;double temp;double sum=0;for(int count=1;count<=20;count++){sum+=up/down;temp=down;down=up;up=temp+up;System.out.printf("该数列的前%d项的和为:%f\n",count,sum);}System.out.printf("该数列的前二十项的和为:%f",sum);}}







原创粉丝点击