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+"个这样的数");
    }
}


【程序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,求应发放奖金总数?

程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。

      超过   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();
    }
}

 


【程序13】

题目:一个整数,它加上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+"  ");
           }
       }
    }
}


【程序14】

题目:输入某年某月某日,判断这一天是这一年的第几天?

     程序分析:以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+"天");
    }
}


【程序15】

题目:输入三个整数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();
    }
}


【程序16】

题目:输出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();//换行
       }
    }
}


【程序17】

题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第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);
    }
}


【程序18】

题目:两个乒乓球队进行比赛,各出三人。甲队为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] );
                            }
                         }
                  }     
              }
           }
       }
    }
}


【程序19】

题目:打印出如下图案(菱形)

 *

   ***

 ******

********

 ******

  ***

   *

程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,

               利用双重 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();
       }
    }
}


【程序20】

题目:有一分数序列: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);
    }
}