Java-07 – JAVA基础编程练习
- 简 介
- 下 载
- 留 言
- 说 明
【程序11】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
程 序 分 析:可填在百位、十位、个位的数字都是1、2、3、4。这里要用3个for循环,用if判断条件是否符合,符合条件的数字打印出来,并计算个数总和
public class Programme11 { public static void main(String[] args) { int sum=0; for (intbite = 1; bite < 5;bite++) { for (intten = 1; ten < 5;ten++) { for (inthundred = 1; hundred < 5;hundred++) { if (bite!=ten&&bite!=hundred&&ten!=hundred) {//符合条件的数字 System.out.print((hundred*100+ten*10+bite)+" "); sum++;//计算个数 if (sum%10==0) {//十个一行 System.out.println(); } } } } } System.out.println("\n总共有:"+sum+"个这样的数"); } }
题目:企业发放的奖金根据利润提成。利润(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,求应发放奖金总数?
程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。
超过 10万 20万 40万 60万 100万 10*0.1 10*0.075 20*0.05 20*0.03 40*0.015 0.01 1 1.75 2.75 3.35 3.95
public class Programme12 { public static void main(String[] args) { System.out.println("请输入你创造的利润(单位:万元):"); Scanner scanner=new Scanner(System.in); while (!scanner.hasNextDouble()) { System.out.println("请输入金额数字:"); scanner.next(); } doubleprofit=scanner.nextDouble(); doublebonus=0; if (profit<=10) { bonus=profit*0.1; }else if(profit<=20){ bonus=(profit-10)*0.075+1; }else if (profit<=40 ) { bonus=(profit-10)*0.05+1.75; }else if (profit<=60 ) { bonus=(profit-10)*0.03+2.75; }else if (profit<=100 ) { bonus=(profit-10)*0.015+3.35; }else { bonus=(profit-100)*0.01+3.95; } System.out.println(profit+"万元利润,可以获得:"+bonus+"万元"); scanner.close(); } }
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
程序分析:在10万以内判断,
用for循环判断:先将该数加上100后再开方,再将该数加上268后再开方,
如果开方后的结果再平方后分别和i+100,i+268相等,即是结果。
public class Prog13{ public class Programme13 { public static void main(String[] args) { for (inti = 0; i <10000;i++) { intnum1=(int)Math.sqrt(i+100);//开方,值已固定了 intnum2=(int)Math.sqrt(i+268); if ((num1*num1==(i+100))&&(num2*num2==(i+268))) {//符合条件的打印出来 System.out.println(i+" "); } } } }
题目:输入某年某月某日,判断这一天是这一年的第几天?
程序分析:以3月5日为例,应该先把前两个月的加起来
,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。
闰年的条件:year除以400能整除,或者year除以4能整除,但是不能是100的倍数
public class Programme14 { public static void main(String[] args) { System.out.println("请输入年月日(用空格隔开):"); Scanner scanner=new Scanner(System.in); int year=scanner.nextInt();//获取年份 int month=scanner.nextInt();//获取月份 int day=scanner.nextInt();//获取天数 int sum=0;//天数总和 //创建一个包含月份天数的数组,先按小年计算,如果是闰年,并且在三月以后再加1 int[] arr={31,28,31,30,31,30,31,31,30,31,30,31}; sum=day;//输入的天数肯定是要加的 for (inti = 1; i < month; i++) { //加上包含的月份天数 sum+=arr[i]; } //最后判断是否是闰年,如果是的话再加1,否则sum就是结果了,条件比较长,我就抽出来写了 booleanisRight=(((year%4==0)&&(year%100!=0))||(year%400==0))&&(month>2); if (isRight) { sum+=1; } System.out.println(year+"年"+month+"月"+day+"日,是这年的第"+sum+"天"); } }
题目:输入三个整数x,y,z,请把这三个数由小到大输出。
程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。
最后两个数也使z>y就可以了
public class Programme15 { public static void main(String[] args) { System.out.println("三个整数:"); Scanner scanner=new Scanner(System.in); int num1=scanner.nextInt();//获取整数 int num2=scanner.nextInt(); int num3=scanner.nextInt(); int temp=0;//最为一个交换数 if (num1>num2) {//保证num2>num1 temp=num1; num1=num2; num2=temp; } if (num1>num3) {//保证num3>num1 temp=num1; num1=num3; num3=temp; } if (num2>num3) {//保证num3>num2 temp=num2; num2=num3; num3=temp; } System.out.println("这三个数从小到大排列:"+num1+" "+num2+" "+num3); scanner.close(); } }
题目:输出9*9口诀。
程序分析:分行与列考虑,共9行9列,i控制行,jC列。
表达式: i+"*"+j+"="+i*j,这里要用两个for循环控制输出和换行
public class Programme16 { public static void main(String[] args) { for (inti = 1; i <= 9;i++) { for (intj = 1; j <=i ;j++) { System.out.print(i+"*"+j+"="+i*j+" ");//输出结果 } System.out.println();//换行 } } }
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
程序分析:采取逆向思维的方法,从后往前推断。
天 数 1 2 3 4 5 。。。10 桃子数 1 4 10 22 46 ? * 所以桃子数计算方法:前一天桃子数*2+2
public class Programme17 { public static void main(String[] args) { int sum=1;//第一天桃子的数量 for (inti =2; i <=10;i++) {//第二天才开始计算 sum=sum*2+2; } System.out.println("猴子摘的桃子数为:"+sum); } }
题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
程序分析:???感觉不能下手!
* 这道题目使用的是构造方法,还有arrayList的知识!标准答案的答案!
* 但是,还是被我用for循环给解决了
* 这里重要的是使用赋值,还有充分使用给出的条件,还有一个就是互不冲突的常识,比如第一个if的使用!
public class Programme18 { public static void main(String[] args) { String a = null,b=null,c=null;//甲队成员 String[] racer = {"x","y","z"};//乙队成员 for(inti=0;i<3;i++){ for (intj = 0; j <3;j++) { for (intk = 0; k < 3;k++) { if (i!=j&&i!=k&&j!=k) { a=racer[i]; b=racer[j];c=racer[k]; if (!a.equals("x")&&!c.equals("z")&&!c.equals("x")) { if (a.equals(racer[i])&&b.equals(racer[j])&&c.equals(racer[k])) { System.out.println("a的对手是:"+racer[i]+",b的对手是:"+racer[j] +",c的对手是:"+racer[k] ); } } } } } } } }
题目:打印出如下图案(菱形)
* *** ****** ******** ****** *** *
程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,
利用双重 for循环,第一层控制行,第二层控制列。
详细分析第一部分图形的规律:1、这是一个等腰三角形,*的打印次数1、3、5、7等差数列
2、还要注意空格打印的 次数3、2、1、0逐渐递减
* 第二部分同理可得!
public class Programme19 { public static void main(String[] args) { //打印上面部分: int n=4; for (inti = 0; i < n; i++) { //控制行 for (intk =3-i; k > 0 ; k--) { //控制*前面空格的输出 System.out.print(" "); } //输出符号,但不要换行 for (intj = 0; j <=2*i;j++) { //控制列 System.out.print("*"); } //输出完符号马上换行 System.out.println(); } //打印下面部分 n=3; for (inti = n; i > 0; i--) { //控制行 for (intk =3-i+1; k > 0 ; k--) { //控制*前面空格的输出,第一行要加空格 System.out.print(" "); } //输出符号,但不要换行 for (intj = 0; j <=2*i-2;j++) { //控制列 System.out.print("*"); } //输出完符号马上换行 System.out.println(); } } }
题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
程序分析:请抓住分子与分母的变化规律。分数:fraction
1、第一项是2/1
2、前面一项分子和分母相加的和,为下一项的分子
*3、前面一项分子,为下一项的分母
public class Programme20 { public static void main(String[] args) { float up=2;//分子 float down=1;//分母 float fraction=up/down;//分数 float temp=0;//交换数 float sum=0;//总和 for (inti = 0; i <20;i++) { //前面20项 sum+=fraction; //分数相加 temp=up+down;//先把分子分母的和赋值给一个交换数,不能马上赋值给分子,因为分子的值下面还有用 down=up; //把分子的值赋值给下一下的分母 up=temp; //把交换数的值赋值给下一项分子 fraction=up/down;//下一项的分数值 } System.out.println(""+sum); } }