Java经典五十道题11到20题

【程序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 stub
		for(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 stub
		System.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 stub
		for(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 stub
		System.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 stub
		System.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 stub
		for(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 stub
		Monkey 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 stub
		int[][] 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;
				else
					abcxyz[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 stub
		System.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 stub
		double 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);
	}

}







  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值