17.2.23 数组操作 水仙花数

1.数组元素中各种的值,数组复制,数组反转(两种方法)

package date0222;

 

public classZuoYe2 {

 

   publicstaticvoidmain(String[] args) {

      // 定义一个int[] a ={4,2,0,-1,-8,23,9}

      // 求数组元素的最大值、最小值、平均数、总和、数组的复制、反转

      int[]arr = { 4, 2, 0, -1, -8, 23, 9 };

      // 复制数组arr1

      int[]arr1 = new int[7];

      // 反转数组arr2

      int[]arr2 = new int[7];

      intmax = 0;

      intmin = 0;

      intsum = 0;

      doubleavg = 0;

      for(inti = 0; i< arr.length;i++) {

          if(arr[i]>= arr[max]){

             max = i;

          }

          if(arr[i]<= arr[min]){

             min = i;

          }

          sum = sum+ arr[i];

      }

      avg = (double) sum/ 7;

      System.out.println("最大值为" + arr[max]);

      System.out.println("最小值为" + arr[min]);

      System.out.println("平均数为" + avg);

      System.out.println("总和为" + sum);

      System.out.println("数组复制");

      for(inti = 0; i< arr1.length;i++) {

          arr1[i] =arr[i];

          System.out.print(arr[i] + "  ");

      }

      System.out.println();

转换时需要定义一个中间数

      //方式1

      System.out.println("数组反转");

      for(inti = 0; i< arr.length/2;i++) {

          inttemp = arr[i];

          arr[i] = arr[arr.length-1-i];

          arr[arr.length-1-i] = temp;

      }

      for(inti = 0; i< arr.length;i++) {

          System.out.print(arr[i]+"  ");

      }

      System.out.println();

      //方式二

      //定义两个变量来保存交换元素的下标,一个从0开始每次++,

      //一个从长度-1开始每次--,直到相等

      for(int start = 0,end =arr.length-1;start<end;start++,end--){

          inttemp = arr[end];

          arr[end]= arr[start];

          arr[start]= temp;

      }

      for(inti = 0; i< arr.length;i++) {

          System.out.print(arr[i]+"  ");

      }

   }

 

}

定义最大值或最小值时可定义成

int max = arr[0];

int min =arr[0];

......

if(arr[i]>=max){

      max=arr[i];

}

或者:

int max =0;

int min = 0;

......

if(arr[i]>=arr[max]){

      max = i;

}

2.前后两数相加等于第三数的问题(红色代码处)

package luoji;

 

public classLuoJi1 {

 

   publicstaticvoidmain(String[] args) {

      /*

        * 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,

        * 小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,

        * 问每个月的兔子总数为多少?

        */

      System.out.println("第1个月的兔子对数:    1");

      System.out.println("第2个月的兔子对数:    1");

      /*思路:从第三个月起每个月的兔子数就是上两个月兔子数只和

        * 设f1为前一月兔子数,f2为后一月兔子数

        */

      intf1 = 1, f2= 1, f, M=24;

           for(int i=3; i<=M;i++) {

            f = f2;

            f2 = f1 + f2;

            f1 = f;

            System.out.println("第" + i+"个月的兔子对数: "+f2);

               }

 

   }

 

}

3.水仙花数问题(通过取余和除获取每一位的值) 

 

package luoji;

 

public classLuoJi3 {

 

   publicstaticvoidmain(String[] args) {

      /*

        * 打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,

        *  其各位数字立方和等于该数本身。例如:153是一个 "水仙花数 "

        * 因为153=1的三次方+5的三次方+3的三次方。

        */

      intge;

      intshi;

      intbai;

      System.out.println("水仙花数有");

      for(inti = 100; i<= 999; i++) {

          // 提取个十百位的值

          ge = i %10;

          shi = i %100 / 10;

          bai = i /100;

          if(ge*ge*ge+shi*shi*shi+bai*bai*bai == i){

             System.out.print(i+"  ");

          }

      }

   }

 

}

 

package date0221;

 

import java.util.Scanner;

 

public classZuoYe17 {

 

   publicstaticvoidmain(String[] args) {

      /*

        * 所谓回文数是指正着数和倒着数一样大,比如1001,5005,8228,9999

        * 请打印出1000-9999之间所有的回文数

        */

      System.out.println("1000到9999之间所有的回文数有:");

      inta = 0;

       for(int x=1000;x<=9999;x++){

          //提取每位的数字

      intge = x%10;

      intshi = x%100/10;

      intbai = x%1000/100;

      intqian = x/1000;

      if(ge==qian&&shi==bai){

          System.out.print(x);

          System.out.print("\t");

          a++;

          if(a%10==0){

             System.out.println();

          }

      }

   }

   }

 

}

 

 

 

 

你可能感兴趣的:(代码解读)