# ITSA E-tutor 程式碼參考(陣列2) ## [陣列 II(Array)](https://e-tutor.itsa.org.tw/e-Tutor/mod/programming/index.php?id=196) > [name=風思] > [time=Mon, Feb 17, 2020 11:18 AM] > [color=#3c1784] ### [C_AR53-易] 學生成績排序 #### Java: ```java= import java.util.*; //[C_AR53-易] 學生成績排序 //2019,08,12;23:19 public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[] scores = new int[n]; for (int i = 0; i < n; i++) scores[i] = sc.nextInt(); Arrays.sort(scores); for (int score : scores) System.out.println(score); sc.close(); } } ``` ### [C_AR54-易] 小寫字元計算 #### Java: ```java= import java.util.*; //[C_AR54-易] 小寫字元計算 //2019,08,13;09:18 public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); char[] chars = new char[n]; int[] character = new int[26]; for (int i = 0; i < n; i++) chars[i] = sc.next().charAt(0); for (int i = 0; i < n; i++) { if (chars[i] >= 'a' && chars[i] <= 'z') character[chars[i] - 'a']++; } for (int i = 0; i < 26; i++) { if (character[i] != 0) { System.out.printf("%c %d\n",i+'a', character[i]); } } } } ``` ### [C_AR57-易] 刪除重複資料 #### Java: ```java= import java.util.*; //[C_AR57-易] 刪除重複資料 //2019,08,16;22:28 public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); sc.nextLine(); int count = 0; while (count < N) { String inputStr = sc.nextLine(); String[] tokens = inputStr.split(""); Set<String> set = new HashSet<String>(); for (int i = 0; i < tokens.length; i++) set.add(tokens[i]); // System.out.println(set); System.out.println(inputStr.length() + " " + set.size()); count++; } sc.close(); } } ``` ### [C_AR58-易] 大整數加法 #### Java: ```java= import java.math.BigInteger; import java.util.*; //[C_AR58-易] 大整數加法 //2019,08,30;19:53 public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); while (N-- > 0) { BigInteger x = new BigInteger(sc.next()); BigInteger y = new BigInteger(sc.next()); System.out.println(x.add(y)); } sc.close(); } } ``` ### [C_AR59-易] 好數問題 #### Java: ```java= import java.util.*; //[C_AR59-易] 好數問題 //2019,08,16;22:57 public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); sc.nextLine(); int count = 0; while (count < N) { String inputStr = sc.nextLine(); if (inputStr.length() != 4) { System.out.println("Failure Input"); count++; continue; } else { String[] tokens = inputStr.split(""); Set<String> set = new HashSet<String>(); for (int i = 0; i < 4; i++) set.add(tokens[i]); // 只有長度為3時才為"好數" if (set.size() == 3) System.out.println("Yes"); else System.out.println("No"); count++; } } sc.close(); } } ``` ### [C_AR62-中] 矩陣相乘 #### C++: ```cpp= #include <bits/stdc++.h> using namespace std; int main() { int m,n,p; while(cin >> m >> n) { int A[m][n]; for(int i=0; i<m; i++) for(int j=0; j<n; j++) cin >> A[i][j]; cin >> n >> p; int B[n][p]; for(int i=0; i<n; i++) for(int j=0; j<p; j++) cin >> B[i][j]; int C[m][p]; memset(C,0,sizeof(C)); for(int i=0; i<m; i++) for(int j=0; j<p; j++) for(int k=0; k<n; k++) C[i][j]+=(A[i][k]*B[k][j]); for(int i=0; i<m; i++) { for(int j=0; j<p; j++) { if(j==0) cout << C[i][j]; else cout << " " << C[i][j]; } cout << endl; } } return 0; } ``` ### [C_AR63-易] 矩陣相加 #### Java: ```java= import java.util.*; //[C_AR63-易] 矩陣相加 //2019,07,14;11:14 public class Main { public static void ArrPrint(int[][] arr) { for (int i = 0; i < arr.length; i++) { for (int j = 0; j < arr[i].length; j++) { if (j == 0) System.out.print(arr[i][j]); else System.out.print(" " + arr[i][j]); } System.out.println(); } } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int row_1 = sc.nextInt(), col_1 = sc.nextInt(); int[][] Firarr = new int[row_1][col_1]; for (int i = 0; i < Firarr.length; i++) { for (int j = 0; j < Firarr[i].length; j++) { Firarr[i][j] = sc.nextInt(); } } // ArrPrint(Firarr); int row_2 = sc.nextInt(), col_2 = sc.nextInt(); int[][] Secarr = new int[row_2][col_2]; for (int i = 0; i < Secarr.length; i++) { for (int j = 0; j < Secarr[i].length; j++) { Secarr[i][j] = sc.nextInt(); } } // ArrPrint(Secarr); int[][] result = new int[row_1][col_2]; for (int i = 0; i < result.length; i++) { for (int j = 0; j < result[i].length; j++) { result[i][j] = Firarr[i][j] + Secarr[i][j]; } } ArrPrint(result); sc.close(); } } ``` ### [C_AR64-易] 井字遊戲判斷 #### Java: ```java= import java.util.*; //[C_AR64-易] 井字遊戲判斷 //2019,08,17;18:22 public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); // 1 or 0 int n = sc.nextInt(); int[][] board = new int[3][3]; boolean isconnect = false; for (int i = 0; i < 3; i++) for (int j = 0; j < 3; j++) board[i][j] = sc.nextInt(); if (board[0][0] == n && board[0][1] == n && board[0][2] == n) { System.out.println("All " + n + "'s on row 0"); isconnect = true; } if (board[1][0] == n && board[1][1] == n && board[1][2] == n) { System.out.println("All " + n + "'s on row 1"); isconnect = true; } if (board[2][0] == n && board[2][1] == n && board[2][2] == n) { System.out.println("All " + n + "'s on row 2"); isconnect = true; } if (board[0][0] == n && board[1][0] == n && board[2][0] == n) { System.out.println("All " + n + "'s on column 0"); isconnect = true; } if (board[0][1] == n && board[1][1] == n && board[2][1] == n) { System.out.println("All " + n + "'s on column 1"); isconnect = true; } if (board[0][2] == n && board[1][2] == n && board[2][2] == n) { System.out.println("All " + n + "'s on column 2"); isconnect = true; } if (board[0][0] == n && board[1][1] == n && board[2][2] == n) { System.out.println("All " + n + "'s on diagonal"); isconnect = true; } if (board[0][2] == n && board[1][1] == n && board[2][0] == n) { System.out.println("All " + n + "'s on subdiagonal"); isconnect = true; } if (!isconnect) System.out.println("There is no line with all " + n); sc.close(); } } ``` ### [C_AR66-易] 撲克牌13點 #### Java: ```java= import java.util.*; //[C_AR66-易] 撲克牌13點 //2019,07,15;13:08 public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()) { String[] input = sc.nextLine().split(" "); int result = 0; for (String num : input) { if (num.equals("A")) result += 14; else if (num.equals("K")) result += 13; else if (num.equals("Q")) result += 12; else if (num.equals("J")) result += 11; else { result += Integer.parseInt(num); } } System.out.println(result); } sc.close(); } } ``` ### [C_AR67-易] 隨意九九乘法 #### C++: ##### <一維>解法一: ```cpp= #include <bits/stdc++.h> #define MAX 6 using namespace std; int arr[MAX]; int main() { int first; while(cin >> first) { arr[0]=first; for(int i=1; i<MAX; i++) cin >> arr[i]; for(int i=0; i<MAX; i++) { for(int j=0; j<MAX; j++) { if(j!=0) cout << " "; cout << setw(3) << setfill('0') << arr[i]*arr[j]; } cout << endl; } } return 0; } ``` ##### <二維>解法二: ```cpp= #include <bits/stdc++.h> #define MAX 6+1 using namespace std; int arr[MAX][MAX]; int main() { int first; while(cin >> first) { arr[1][0]=first; arr[0][1]=arr[1][0]; for(int i=2; i<MAX; i++) { cin >> arr[i][0]; arr[0][i]=arr[i][0]; } for(int i=1; i<MAX; i++) { for(int j=1; j<MAX; j++) arr[i][j]=(arr[i][0]*arr[0][j]); } for(int i=1; i<MAX; i++) { for(int j=1; j<MAX; j++) { if(j==1) cout << setw(3) << setfill('0') << arr[i][j]; else cout << " " << setw(3) << setfill('0') << arr[i][j]; } cout << endl; } } return 0; } ``` ### [C_AR70-易] 不要在太歲爺頭上動土 #### Java: ```java= import java.util.*; //[C_AR70-易] 不要在太歲爺頭上動土 //2019,08,17;20:41 public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int year = sc.nextInt(); // 西元元年(1年)屬雞 String[] zodiac = { "monkey", "rooster", "dog", "pig", "rat", "ox", "tiger", "rabbit", "dragon", "snake", "horse", "goat" }; // 正沖 int x = year % 12; System.out.println(zodiac[x]); // 對沖 if (x + 6 > 11) System.out.println(zodiac[x + 6 - 12]); else System.out.println(zodiac[x + 6]); sc.close(); } } ``` ### [C_AR72-易] 電影票購買計算 #### Java: ```java= import java.util.*; //[C_AR72-易] 電影票購買計算 //2019,07,15:12:28 public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int count = 0; while (count < n) { int fullTickets = sc.nextInt(); int halfTickets = sc.nextInt(); System.out.println(250 * fullTickets + 175 * halfTickets); count++; } sc.close(); } } ``` ### [C_AR73-易] 兔子生育計算 #### Java: ```java= import java.util.*; //[C_AR73-易] 兔子生育計算 //2019,07,15;12:48 public class Main { public static void fabPrint(int n) { int f0 = 1; int f1 = 1; for (int i = 0; i < n; i++) { if (i % 2 == 0) { if (i == 0) // just run once System.out.print(f0); else System.out.print(" " + f0); f0 = f0 + f1; } else { System.out.print(" " + f1); f1 = f0 + f1; } } System.out.println(); } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int count = 0; while (count < n) { fabPrint(sc.nextInt()); count++; } sc.close(); } } ``` ### [C_AR74-中] 學生資料搜尋程式 #### Java: ```java= import java.util.*; //[C_AR74-中] 學生資料搜尋程式 //2019,08,18 public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String[][] date = { { "123", "Tom", "DTGD" }, { "456", "Cat", "CSIE" }, { "789", "Nana", "ASIE" }, { "321", "Lim", "DBA" }, { "654", "Won", "FDD" } }; int N = sc.nextInt(); int count = 0; while (count < N) { int searchCode = sc.nextInt() - 1; String key = sc.next(); //System.out.println(key); int row = 0; for (int i = 0; i < date.length; i++) { //System.out.println(i+" "+date[i][searchCode]+" "+key); if (key.equals(date[i][searchCode])) { row = i; break; } } System.out.println(date[row][0] + " " + date[row][1] + " " + date[row][2]); count++; } sc.close(); } } ``` ### [C_AR75-易] 5與7倍數之陣列計算 #### Java: ```java= import java.util.*; //[C_AR75-易] 5與7倍數之陣列計算 //2019,09,08;09:20 public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); Set<Double> arrayList = new HashSet<Double>(); int M = sc.nextInt(); int n, count; double temp_5, temp_7, sum, average; while (M-- > 0) { n = sc.nextInt(); arrayList.clear(); count = 0; sum = 0; average = 0; Object[] arr; for (int i = 1; true; i++) { temp_5 = 5 * i; temp_7 = 7 * i; if (temp_5 > n && temp_7 > n) break; if (temp_5 <= n) arrayList.add(temp_5); if (temp_7 <= n) arrayList.add(temp_7); } arr = arrayList.toArray(); Arrays.sort(arr); for (int i = 0; i < arr.length; i++) { if (i % 2 == 0) sum += (double) arr[i]; else { average += (double) arr[i]; count++; } } average /= count; System.out.printf("%.0f\n%.1f\n", sum, average); } sc.close(); } } ``` ### [C_AR76-易] 提款機程式 #### C: ```cpp= #include <stdio.h> #include <stdlib.h> int main() { int N,i; scanf("%d",&N); int account, password; for (i = 0; i < N; i++) { scanf("%d %d",&account,&password); if (account == 123 && password == 456) { printf("%d\n",9000); } else if (account == 456 && password == 789) { printf("%d\n",5000); } else if (account == 789 && password == 888) { printf("%d\n",6000); } else if (account == 336 && password == 558) { printf("%d\n",10000); } else if (account == 775 && password == 666) { printf("%d\n",12000); } else if (account == 566 && password == 221) { printf("%d\n",7000); } else { printf("%s\n","error"); } } return 0; } ``` #### Java: ```java= import java.util.*; //[C_AR76-易] 提款機程式 //2019,08,19;13:01 public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int account, password; for (int i = 0; i < N; i++) { account = sc.nextInt(); password = sc.nextInt(); if (account == 123 && password == 456) { System.out.println(9000); } else if (account == 456 && password == 789) { System.out.println(5000); } else if (account == 789 && password == 888) { System.out.println(6000); } else if (account == 336 && password == 558) { System.out.println(10000); } else if (account == 775 && password == 666) { System.out.println(12000); } else if (account == 566 && password == 221) { System.out.println(7000); } else { System.out.println("error"); } } sc.close(); } } ``` ### [C_AR77-易] 二維陣列反轉 #### C: ```cpp= #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int row,col; scanf("%d",&row); //宣告列 scanf("%d",&col); //宣告行 int a[row][col]; //宣告陣列 int i,j,k=1; //從1開始填值; for (i=0; i<row; i++) //填值 ; { for(j=0; j<col; j++) a[i][j]= k++; } for(i=row-1; i>=0; i--) //反轉 { for(j=col-1; j>=0; j--) { if(j==col-1) printf("%d",a[i][j]); //第一個數字 不必打空格; else printf(" %d",a[i][j]); //其餘數字則 "[空格]+數字"; } printf("\n"); //換行; } return 0; } ``` ### [C_AR78-易] 最佳得分點 這算是難題。 #### C++: ```cpp= #include <bits/stdc++.h> #define MAX 100 using namespace std; typedef struct node { double d; int x; int y; } pos; bool cmp(pos a,pos b) { if(a.d==b.d) { if(a.x==b.x) return (a.y<b.y); else return (a.x<b.x); } else return(a.d<b.d); } pos arr[MAX]; int main() { int x,y,j=0,goal_x,goal_y; while(cin >> x >> y) { if((x==-1 and y==-1) or (j>=MAX)) break; arr[j].x=x; arr[j].y=y; j++; } cin >> goal_x >> goal_y; for(int i=0; i<j; i++) arr[i].d=pow(arr[i].x-goal_x,2)+pow(arr[i].y-goal_y,2); sort(arr,arr+j,cmp); double min_d=arr[0].d; for(int i=0; i<j; i++) { if(arr[i].d==min_d) cout << arr[i].x << " " << arr[i].y << endl; else break; } return 0; } ``` ### [C_AR80-中] 聖經密碼 #### Java: ```java= import java.util.*; //[C_AR80-中] 聖經密碼 //2019,08,19;22:30 public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); // 處理輸入的加密字串將每兩筆置入二維陣列 String[] tokens = sc.nextLine().split(","); int count = 0; int[][] index = new int[tokens.length / 2][2]; for (int i = 0; i < index.length; i++) for (int j = 0; j < 2; j++) index[i][j] = Integer.parseInt(tokens[count++]); // 處理表格轉為二維陣列 String str = "ddaazadassdchnrmloqzfhkujqwfvxhf,l.f124sae355d9fgd121cz6aefgb2366b6hhcqr75z8i9hb rstyuvwxsjlvakmn0op"; String[][] chars = new String[10][10]; int beginIndex = 0, endIndex = 10; for (int i = 0; i < 10; i++) { chars[i] = str.substring(beginIndex, endIndex).split(""); beginIndex += 10; endIndex += 10; } // 開始查表 for (int i = 0; i < index.length; i++) System.out.print(chars[index[i][0]][index[i][1]]); System.out.println(); sc.close(); } } ``` ### [C_AR81-易] 求Array元素最大值的和 #### Java: ```java= import java.util.*; //[C_AR81-易] 求Array元素最大值的和 //2019,07,14;11:56 public class Main { public static int ArrMax(int[][] arr) { int max = arr[0][0]; int pi = 0, pj = 0; for (int i = 0; i < arr.length; i++) { for (int j = 0; j < arr[i].length; j++) { if (arr[i][j] > max) { max = arr[i][j]; pi = i; pj = j; } } } arr[pi][pj] = Integer.MIN_VALUE; return max; } public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()) { int[][] Arr = new int[3][3]; String[][] nums = new String[Arr.length][Arr[0].length]; for (int i = 0; i < Arr.length; i++) { nums[i] = sc.nextLine().split(","); } for (int i = 0; i < Arr.length; i++) { for (int j = 0; j < Arr[i].length; j++) { Arr[i][j] = Integer.parseInt(nums[i][j]); } } int result = ArrMax(Arr) + ArrMax(Arr) + ArrMax(Arr); System.out.println(result); } sc.close(); } } ``` ### [C_AR82-中] 不同百比例的成績計算 他的測資也太詭異了...。 #### C++: ```cpp= #include <bits/stdc++.h> using namespace std; int main() { int n,m; double sum,temp; cin >> n >> m; sum=0; double weight[n]; double avg[m]; int score[m][n]; for(int i=0; i<n; i++) cin >> weight[i]; for(int i=0; i<m; i++) for(int j=0; j<n; j++) cin >> score[i][j]; for(int i=0; i<m; i++) { temp=0; for(int j=0; j<n; j++) temp+=(score[i][j]*weight[j]); avg[i]=round(temp*100)/100.0; } for(int i=0; i<m; i++) sum+=avg[i]; cout << fixed << setprecision(2) << sum/m << endl; return 0; } ``` ### [C_AR83-中] 字元出現次數 #### Java: ```java= import java.util.*; //[C_AR83-中] 字元出現次數 //2019,08,19;21:46 public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str; char chr; int count = 0; while (sc.hasNext()) { str = sc.nextLine(); if (str.equals("end")) break; chr = sc.nextLine().charAt(0); count = 0; for (int i = 0; i < str.length(); i++) { if (str.charAt(i) == chr) count++; } System.out.println(count); } sc.close(); } } ``` ### [C_AR95-易] 猜數字 #### Java: ```java= import java.util.*; //[C_AR95-易] 猜數字 //2019,08,19;13:28 public class Main { public static int[] getIntArr(String str) { String[] tokens = str.split(""); int[] output = new int[4]; for (int i = 0; i < 4; i++) output[i] = Integer.parseInt(tokens[i]); return output; } public static int getA(int[] x, int[] y) { int count = 0; for (int i = 0; i < 4; i++) { if (y[i] == x[i]) count++; } return count; } public static int getB(int[] x, int[] y) { int count = 0; for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { if (y[i] == x[j]) count++; } } return count; } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int[] ans = getIntArr(sc.nextLine()); while (sc.hasNext()) { String inputStr = sc.nextLine(); if (inputStr.equals("0000")) break; int[] nums = getIntArr(inputStr); System.out.printf("%dA%dB\n", getA(nums, ans), getB(nums, ans) - getA(nums, ans)); } sc.close(); } } ``` ### [C_AR96-易] 換位加密 #### Java: ```java= import java.util.*; //[C_AR96-易] 換位加密 //2019,08,19;22:20 public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int act = sc.nextInt(); int d = sc.nextInt(); sc.nextLine(); String[][] arr = new String[d][d]; for (int i = 0; i < d; i++) Arrays.fill(arr[i], " "); String str = sc.nextLine(); String[] tokens = str.split(""); int index = 0; String result = ""; if (act == 0) { Loop: for (int i = 0; i < d; i++) { for (int j = 0; j < d; j++) if (index < tokens.length) arr[i][j] = tokens[index++]; else break Loop; } for (int i = 0; i < d; i++) for (int j = 0; j < d; j++) result += arr[j][i]; System.out.println(result.trim()); } else { Loop: for (int i = 0; i < d; i++) { for (int j = 0; j < d; j++) if (index < tokens.length) arr[j][i] = tokens[index++]; else break Loop; } for (int i = 0; i < d; i++) for (int j = 0; j < d; j++) result += arr[i][j]; System.out.println(result.trim()); } } } ``` ### [C_AR97-易] 矩陣分素乘積 #### C++: ```cpp= #include <bits/stdc++.h> using namespace std; int main() { int m,n; while(cin >> m >> n) { int A[m][n]; int B[m][n]; for(int i=0; i<m; i++) for(int j=0; j<n; j++) cin >> A[i][j]; for(int i=0; i<m; i++) for(int j=0; j<n; j++) cin >> B[i][j]; for(int i=0; i<m; i++) { for(int j=0; j<n; j++) { if(j==0) cout << A[i][j]*B[i][j]; else cout << " " << A[i][j]*B[i][j]; } cout << endl; } } return 0; } ``` ###### tags: `e tutor` `陣列 II(Array)`