close

501

import java.util.Scanner;
public class JPA05 {
    static Scanner k = new Scanner(System.in);
    
    public static void main(String args[]) {
        int count[] = new int[10]; //arr配置10個整數的陣列元素,索引為0到9
        int sum=0,n=0;
        System.out.println("請輸入10個整數:");
        for (int i=0;i<10;i++){ //因為陣列索引只到9,這裡不能等於10
            System.out.printf("第%d個整數:",i+1); //因此在這邊直接加上1來計數
            count[i] = k.nextInt(); //將每次讀取的值,分別存入陣列中
        }
        for (int i=0;i<10;i++){ //迴圈讀取陣列中的元素
            if (count[i] > 60){ //依據題目要求,將大於60的值另外做處理
                sum = sum + count[i]; //加總
                n++;     //計算個數
            }
        }

        
        System.out.println("陣列中大於60的有" + n + "個\n總合為" + sum + "\n平均值為" + (sum / (double)n));
    }
}

502

import java.util.Scanner;
public class JPA05 {
    public static Scanner keyboard = new Scanner(System.in);
    
    public static void main(String args[]) {
        System.out.print("請輸入學生人數:");
        int num = keyboard.nextInt();
        float count[] = new float[num]; //這題要使用float型態,才能按照題目計算小數點後6位,若使用double會不夠精確
        float sum=0; //加總
        for (int i=0;i<num;i++){  //個數為使用者輸入的 num 值
            System.out.printf("第%d個學生的成績:",i+1);
            count[i] = keyboard.nextFloat(); //將使用者輸入的值,分別存入陣列中
        }
        for (int i=0;i<num;i++){ //迴圈加總
            sum = sum + count[i];
        }
        System.out.printf("人數:%d\n",num);
        System.out.printf("總分:%.2f\n",sum);
        System.out.printf("平均:%f\n",(sum/num));


              

    }
}

503

public class JPA05 {
    final static int ROW = 2;
    final static int COL = 3;

    public static void main(String args[]) {
        int A[][] = {{1,2,3}, {4,5,6}};
        int B[][] = {{7,8,9}, {10,11,12}};
        int C[][] = new int[ROW][COL];
       
        System.out.printf("陣列A的內容為(3x3):\n");   
        show(A);
       
        System.out.printf("\n陣列B的內容為(3x3):\n");   
        show(B);
       
        add(A, B, C);
       
        System.out.printf("\n陣列A+B=C,陣列C的內容為(3x3):\n");   
        show(C);
    }
    
    public static void add(int a[][], int b[][], int c[][]) {
        for(int i=0;i<ROW;i++){ //迴圈列,在程式開頭已定義
            for(int j=0;j<COL;j++){ //迴圈行,在程式開頭已定義
                c[i][j] = a[i][j] + b[i][j];
            }
        }
    }
    
    public static void show(int x[][]) {
        for(int i=0;i<ROW;i++){ //迴圈列,在程式開頭已定義
            for(int j=0;j<COL;j++){ //迴圈行,在程式開頭已定義
                System.out.printf("%02d ",x[i][j]);  //未達2位數,前面補0
            }
            System.out.printf("%n");  //換行
        }
    }
}

504

import java.util.Scanner;
public class JPA05 {
    public static Scanner keyboard = new Scanner(System.in);
    
    public static void main(String[] argv) {
        int fs[] = new int[10]; //宣告一個大小為10的整數陣列
        fs[0] = 0; //指定前面二個陣列的初始值
        fs[1] = 1;
        for(int i=2;i<10;i++){ //從第3個個陣列開始迴圈
            fs[i] =fs[i-1]+fs[i-2]; //費式數列公式
            
        }
        for(int i=0;i<10;i++){  //迴圈輸出結果
            System.out.println(fs[i]);
        }
        
        



    }
}

505

public class JPA05 {
    public static void main(String[] argv) {
        String[] data = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J"};
        System.out.print("反轉陣列資料之前: ");
        
        for(int i=0;i<data.length;i++){ //迴圈打印,取陣列長度
            System.out.print(data[i]+" ");
        }
        System.out.printf("%n");
        reverse(data);
        
        System.out.print("反轉陣列資料之後: ");
        
        for(int i=0;i<data.length;i++){ //迴圈打印
            System.out.print(data[i]+" ");
        }
        System.out.printf("%n"); //換行
    }
    
    public static void reverse(String s[]) {
        String x; 
        for(int i=0;i<s.length/2;i++){ //反轉只要取一半,因為前後會同時替換,若全部換會變為原樣
            x = s[i];   //將第1個字元存入x變數
               s[i] = s[s.length-1-i]; //將最後一個字元,改存到第一個字元
               s[s.length-1-i] = x;    //將x存入最後一個字元
               
        }
        
        
    }
}

506

public class JPA05 {
    public static void main(String[] argv) {
       int sum =0;
       int A[][][] = {{{1,2,3},{4,5,6}},
                       {{7,8,9},{10,11,12}},
                       {{13,14,15},{16,17,18}},
                       {{19,20,21},{22,23,24}}};
                               
       for(int x=0;x<4;x++){                    //根據維度,做多重迴圈
              for(int y=0;y<2;y++){                //題目說明,維度為 4*2*3
                     for(int z=0;z<3;z++){
                            sum = sum + A[x][y][z];      //加總
                     }
              }
       }


       
       System.out.printf("sum = %d\n", sum);
    }
}

507

public class JPA05 {
    public static void main(String[] argv) {
        int hours = 0;   //停車時數

        hours = 2;
        park(hours);
        System.out.println("--------------------");
        
        hours = 3;
        park(hours);
        System.out.println("--------------------");
        
        hours = 5;
        park(hours);
        System.out.println("--------------------");
        
        hours = 8;
        park(hours);
    }
    
    public static void park(int hours) {
        int[] hourTable = {0, 2, 4, 6};   // 時段
        int[] feeTable = {30, 50, 80, 100};   // 時段費率
        int fee = 0;   //停車費用
        System.out.println("停車時數:" + hours + "小時");   //在hours未被改動前先輸出時數      
        for(int i=3;i>=0;i--){   //總共有四個元素,以遞減的方式回圈
            if(hours>hourTable[i]){  //若輸入的時數大於該時段,則計算
                fee = fee + (hours-hourTable[i]) * feeTable[i]; //加總 + (時數減時段*該時段價錢)(例如3小時就3-2,算多出一小時的錢*該時段價錢)
                hours = hourTable[i]; //算下一層時段的錢再次加總 (例如3-2小時算完多出的一小時,還要再算去掉的2小時*下一層時段的價錢)
            }
            
        }
        
        System.out.println("應繳費用:" + fee + "元整");
    }
}

508

public class JPA05 {
    public static void main(String[] argv) {
        int[] data = {2, 4, 3, 5, 7, 6, 9, 1};  // 為排序的資料
        int x;
        //泡泡排序法,原理就是比較相鄰元素的大小,根據交換的過程
        //一次循環將最小或最大的元素排在最前或最後面,以此類推

        //第二層迴圈比較相鄰元素,把最大的元素交換到最右邊
        //第一層迴圈會重新讀取變動過後的所有元素,再次進入第二層迴圈
        for(int i=0;i<data.length-1;i++){ //長度減少1,比較時才不會超出陣列範圍
            for(int j=0;j<data.length-1;j++){
                if(data[j] > data[j+1]){ //若前面的元素大於後面的元素,則交換
                    x = data[j+1];
                    data[j+1] = data[j];
                    data[j] = x;
                }
            }
            for(int k=0;k<data.length;k++){ //打印結果
                System.out.printf("%d ",data[k]);
            }
            System.out.printf("%n");
        }
    }
}

509

public class JPA05 {
    public static void main(String[] argv) {
        int[] data = {1, 3, 2, 5, 4, 6};
        
        sort(data);
    }
    //選擇排序法,原理是將待排序數組分為已排序和未排序兩個
    //從待排序數組中取得最小的元素,跟後面元素最比較,小則更新
    //最後將最小的元素與迴圈到的元素做交換,結束後再進行下一個元素的迴圈
    static void sort(int data[]){
        for(int i=0;i<data.length-1;i++){//第一層迴圈,取一個元素,最後跟最小的元素做交換
            int x,d;//x用來儲存最小元素,d用來交換值
            x=i;
            for(int j=i+1;j<data.length;j++){ //第二層迴圈,找出最小元素
                if(data[j]<data[x]){ //若迴圈到的元素小,則替換為最小元素
                    x=j;
                }
            }
            d = data[x]; //將最小元素與迴圈到的元素做交換
            data[x] = data[i];
            data[i] = d;
        
            for(int k=0;k<data.length;k++){ //打印結果
                System.out.printf("%d ",data[k]);
            }
            System.out.printf("%n");
        }
    }
}

510

import java.util.Scanner;
public class JPA05 {
    public static Scanner keyboard = new Scanner(System.in);
    
    public static void main(String[] argv) {
        search();
        search();
    }
    
    public static void search() {
        int[] data = {5, 9, 13, 15, 17, 19, 25, 30, 45}; // 已排序資料

        System.out.print("請輸入要找尋的資料:");

        int target = keyboard.nextInt();
        //二分搜尋法的原理:從數列的中間開始搜尋,若大於或小於中位數,則迴圈繼續搜尋大於或小於的那半邊
        //若要搜尋的數等於中位數,或是首項等於末項(搜尋結束沒找到資料),則跳出迴圈打印結果
        
        //設a為首項,b為末項,i為搜尋次數
        int a=0,b=data.length-1,i=1;
        
        System.out.printf("尋找區間:%d(%d)..%d(%d),中間:%d(%d)\n",a,data[a],b,data[b],((a+b)/2),data[(a+b)/2]);
        do{
            if (target<data[(a+b)/2]){ //若要尋找的值小於中位數
                b = (a+b)/2-1;           //則將末項改為中位數-1(-1是要去除掉該中位數)
            }else if(target>data[(a+b)/2]){ //若要尋找的值大於中位數
                a = (a+b)/2+1;              //則將首項改為中位數+1(+1是要去除掉該中位數)
            }
            i++;
            System.out.printf("尋找區間:%d(%d)..%d(%d),中間:%d(%d)\n",a,data[a],b,data[b],((a+b)/2),data[(a+b)/2]);
        }while(target!=data[(a+b)/2]&&b>a); //如果要尋找的數不等於中位數、末項大於首項,則繼續進行迴圈
        System.out.printf("經過 %d 次的尋找\n",i);
        if (target == data[(a+b)/2]) System.out.printf("您要找的資料在陣列中的第%d個位置\n",(a+b)/2);
        else System.out.printf("%d不在陣列中\n",target);
    }
}
arrow
arrow
    全站熱搜

    ivankao 發表在 痞客邦 留言(0) 人氣()