1. 程式人生 > 其它 >Java從零開始 第5.5講 執行結構和陣列的習題課

Java從零開始 第5.5講 執行結構和陣列的習題課

技術標籤:Java從零開始演算法leetcodejava

執行結構和陣列的習題課


在這一講中我將列出從易到難的關於執行結構和陣列的習題,其中部分的題會有註釋,最好在不看答案的情況下自己編寫,即使看過了答案,也要能夠在不看答案的情況下寫出來。

執行結構題

計算各數位的和

輸入一個數,判斷這個數是不是一個五位數,如果是,則計算出這個數字各個數位的和(如12312數位的和為1+2+3+1+2=9)

       
        Scanner scanner = new Scanner(System.in);
        System.out.print("Please input a number of 5 digits: ");
        int i = scanner.nextInt();
        if(i > 9999 && i <= 99999){
            int sum = (i/10000) + (i/1000)%10 + (i/100)%10  + (i%100)/10 + i%10;
            System.out.println(sum);
        }


執行結果:
Please input a number of 5 digits: 56765
29

利用星號*畫圖

利用星號*畫圖,畫出倒三角形,寶塔形,和空心寶塔形,如下
在這裡插入圖片描述
在這裡插入圖片描述

        
        //倒三角形
        for(int i = 0; i <= 4; i++) {
            int j;
            for (j = 5 - i; j > 0; j--)
                System.out.print("*");
            System.out.print("\n");
        }


        //寶塔形
        for(int i = 0; i <= 5; i++) {
            int j;
            for (j = 5 - i; j > 0; j--)
                System.out.print(" ");
            for (j = 2*i - 1; j > 0; j--)
                System.out.print("*");
            System.out.print("\n");
        }
        System.out.print("\n");


        //空心寶塔形
        for (int i = 0; i <= 5; i++){
            int j;
            for (j = 5 - i; j > 0; j--)
                System.out.print(" ");
            for (j = 2*i - 1; j > 0; j--) {
                if (j == 2*i - 1 || j == 1)
                    System.out.print("*");
                else
                    System.out.print(" ");
            }
            System.out.print("\n");
        }
        

九九乘法表

輸出九九乘法表(需要對齊,如下)
在這裡插入圖片描述

        
        for (int i = 1; i <= 9; i++){
            for (int j = 1; j <= i; j++){
                System.out.print(j + "*" + i + "=" + i*j);
                System.out.print("   ");
                if(i*j <= 9)
                    System.out.print(" ");
            }
            System.out.print("\n");
        }
        

陣列題

查詢特定數字

查詢陣列{1,3,5,7,2,4,6,8}中的4的位置,並輸出下標


        int[] nums = {1, 3, 5, 7, 2, 4, 6, 8};
        int position = -1;
        for(int i = 0; i < nums.length; i++){
            if (nums[i] == 4)
                position = i;
        }
        System.out.print(position);


執行結果:
5

降序氣泡排序

寫出降序氣泡排序的程式碼
|
|
|
|
|
|
答案:把之間的nums[j] > nums[i]中的大於號換為小於號即可

重寫二分查詢

不看之前提供的程式碼,自己重新寫出二分查詢的程式碼

答案:見上一講

選擇領隊問題

10個人被分到同一個小組,他們希望通過公平的方式選擇小組的領隊,所有人圍成一圈,從第一個人開始報數,報到3的整數倍的人退出圈子,剩下的人繼續報數,最後留下的人當選為領隊。

(這一題比較難,註釋比較多,如果能看懂就說明結構和陣列掌握的比較不錯)

import java.util.Scanner;

public class FindLeader {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        System.out.print("Input the quantity of students: ");
        int i = scanner.nextInt();
        boolean[] people = new boolean[i];

        for (int j = 0; j < i; j++)
            people[j] = true;//設定每個學生都是true

        int count = 1;//學生報的數
        int outCount = 0;//出局的人的個數

        for (int k = -1; outCount < (i-1);) {
            k++;
            if (!people[k%i])
                continue;//已經出局的人跳過
            if (count == 3) {
                people[k%i] = false;//意味著該學生出局
                System.out.println((k%i + 1) + " is out");
                outCount++;//出局人數加一
                count = 0;//報數迴歸0,注意這裡不是,因為後面有count++
            }
            count++;
        }

        for (int j = 0; j < i; j++){
            if (people[j])
                System.out.println((j+1) + " is the leader");//輸出最後的leader
        }
    }
}



執行結果:
Input the quantity of students: 10
3 is out
6 is out
9 is out
2 is out
7 is out
1 is out
8 is out
5 is out
10 is out
4 is the leader

轉載請註明出處