Java從零開始 第5.5講 執行結構和陣列的習題課
阿新 • • 發佈:2020-12-13
執行結構和陣列的習題課
在這一講中我將列出從易到難的關於執行結構和陣列的習題,其中部分的題會有註釋,最好在不看答案的情況下自己編寫,即使看過了答案,也要能夠在不看答案的情況下寫出來。
執行結構題
計算各數位的和
輸入一個數,判斷這個數是不是一個五位數,如果是,則計算出這個數字各個數位的和(如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