# 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)`