# 黎明高中資訊社第三次平時考
---
## 目錄:
> [TOC]
## 說明:
社長或副社長將從itsa或者zero judge挑選出4至5題的題目,基本上都不會選有出現在資訊社資源目錄的,難度隨題號遞增,在社團課抑或週六課程時將驗收,選擇自己會寫的先做,目前都是你們能夠解決的。
## 完成者填寫說明:
若已答題且正確完畢,請寫上自己的姓名,可以自己新增更多名次(如第一題有到11名,可以繼續增加),有空社長將抽查答對者的想法與程式,一切採自由心證,當然我回去看報表核對。
## 時間:
2020/05/30至2020/06/11 <10 p.m>
## 獎勵:
很讚的東西。
## 社長的話:
<font color="#DC143C">上次的資訊段考,太簡單?因為:</font>

<font color="#800080">但是這次有讓你連輸入都不知道怎麼輸入的題目:</font>

> [name=風思]
> [time=Sat, May 30, 2020 8:17 PM]
> [color=#f55f]
## 解答:
已以釋出。
---
### 1.<font color="#99FF">[C_AR97-易] 矩陣分素乘積</font>
#### =>[題目連結](https://e-tutor.itsa.org.tw/e-Tutor/mod/programming/view.php?a=6471)
#### 問題敘述:
寫一個程式輸入兩個相同維度的矩陣,求得兩矩陣的分素乘積( entrywise product )。兩個 mxn 矩陣 A 與 B 的分素乘積 A 。 B ,定義為 (A 。 B)ij=aijbij 。例如,

### 完成者:
1. <社長>
> [time=Sat, May 30, 2020 8:12 PM]
2. <張嘉元>
> [time=Sat, May 30, 2020 11:05 PM]
3. <吳冠毅>
> [time=Tue, Jun 2, 2020 10:41 AM]
> 想當不測試的真男人還是失敗了
4. <吳品範>
> [time=Wed, Jun 3, 2020 10:38 AM]
5. <陳宜俊>
> [time=Wed, Jun 3, 2020 10:40 AM]
6. <何承煜>
> [time=Wed, Jun 3, 2020 11:24 AM]
7. <柯昀杰>
> [time=Wed, Jun 3, 2020 11:55 AM]
8. <陳寬仁>
> [time=Wed, Jun 3, 2020 11:55 AM]
9. <李晨維>
> [time=Sat, Jun 6, 2020 1:00 PM]
10. <胡韡薰>
> [time=Sat, Jun 6, 2020 2:36 PM]
#### 社長提供的測資:
```
input:
8 8
1 2 3 4 5 6 7 8
9 8 7 6 5 4 3 2
1 2 3 4 5 6 7 8
1 3 5 7 2 4 6 8
9 8 7 6 5 4 3 2
1 2 3 4 5 6 7 8
1 3 5 7 2 4 6 8
1 2 3 4 5 6 7 8
1 3 5 7 2 4 6 8
9 8 7 6 5 4 3 2
1 2 3 4 5 6 7 8
1 3 5 7 2 4 6 8
9 8 7 6 5 4 3 2
1 2 3 4 5 6 7 8
1 3 5 7 2 4 6 8
1 2 3 4 5 6 7 8
```
```
output:
1 6 15 28 10 24 42 64
81 64 49 36 25 16 9 4
1 4 9 16 25 36 49 64
1 9 25 49 4 16 36 64
81 64 49 36 25 16 9 4
1 4 9 16 25 36 49 64
1 9 25 49 4 16 36 64
1 4 9 16 25 36 49 64
```
### 參考解答(社長提供):
####
```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;
}
```
### 參考解答(社員提供):
---
### 2.<font color="#E3FF33">[C_AR94-易] 洗刷刷</font>
#### =>[題目連結](https://e-tutor.itsa.org.tw/e-Tutor/mod/programming/view.php?a=6427)
#### 問題敘述:
請撰寫一個與電腦比賽的洗刷刷遊戲程式。遊戲規則 : 你可以出 1.2.3.4.5 這五個數字 1 比 5 大、 2 比 1 大、 3 比 2 大、 4 比 3 大、 5 比 4 大,看你和對方出的誰比較大誰就 贏 了,但是要記住。例如 5 比 4 大, 4 比 3 大,但是 5 沒有比 3 大,以此類推,就是每個數目都只有一個比他小的和一個比她大的。
輸入一連串數字為甲方的數字,輸入一連串數字為乙方的數字,兩者相比,判斷贏、輸或和局。
### 完成者:
1. <社長>
> [time=Sat, May 30, 2020 8:12 PM]
2. <吳冠毅>
> [time=Tue, Jun 2, 2020 11:06 AM]
3. <吳品範>
> [time=Wed, Jun 3, 2020 11:13 AM]
4. <陳宜俊>
> [time=Wed, Jun 3, 2020 11:29 AM]
5. <何承煜>
> [time=Wed, Jun 3, 2020 11:46 AM]
6. <李晨維>
> [time=Wed, Jun 3, 2020 11:56 AM]
7. <張嘉元>
> [time=Sat, Jun 6, 2020 2:09 PM]
8. <柯昀杰>
> [time=Sat, Jun 6, 2020 2:27 PM]
9. <胡韡薰>
> [time=Tue, Jun 9, 2020 10:58 AM]
#### 社長提供的測資:
```
input:
12542524212323133212121244
11345131425241321424132141
```
```
output:
和贏和和和輸輸和和輸和贏和和和贏和和輸和和輸輸贏和和
```
### 參考解答(社長提供):
#### C++:
```cpp=
#include <iostream>
#include <cmath>
using namespace std;
int main(){
string str1,str2;
int num1,num2;
int flag;//1=甲贏,0=平手,-1乙贏
while(cin >> str1 >> str2){
for(int i=0; i<str1.length(); i++){
num1=str1.at(i)-'0';
num2=str2[i]-'0';
if(num1==1 and num2==5)
flag=1;
else if(num1==5 and num2==1)
flag=-1;
else if(num1==num2 or abs(num1-num2)>1)
flag=0;
else
flag=(num1-1==num2)?1:-1;
switch(flag){
case 1:
cout << "贏";
break;
case 0:
cout << "和";
break;
case -1:
cout << "輸";
break;
}
}
cout << endl;
}
return 0;
}
```
### 參考解答(社員提供):
---
### 3.<font color="#FF7433">[C_SO45-易] 混合數列</font>
#### =>[題目連結](https://e-tutor.itsa.org.tw/e-Tutor/mod/programming/view.php?a=11533)
#### 問題敘述:
有兩個數列 x =3^1, 3^2, 3^3,.... 及 y = 4^1, 4^2, 4^3,... 。將兩個數列混合成一個數列 z ,裏面的數字由小排到大。請你寫一個程式,輸出 z 數列的第 k 項,以及前 k 項的合。
例如 k =6 ,則 z 的前 6 項為 3,4,9,16,27,64 。所以第 k 項為 64 ,且前 k 項的合為 123 。
在這個題目中,假設 k <=50.
### 完成者:
1. <社長>
> [time=Sat, May 30, 2020 8:12 PM]
2. <張嘉元>
> [time=Sun, May 31, 2020 2:06 PM]
> 放棄社長測資的人
3. <吳冠毅>
> [time=Wed, Jun 3, 2020 11:13 AM]
4. <吳品範>
> [time=Sat, Jun 6, 2020 12:44 PM]
5. <李晨維>
> [time=Sat, Jun 6, 2020 1:22 PM]滑鼠好難用,腦袋更難
6. <陳宜俊>
> [time=Sat, Jun 6, 2020 2:29 PM]
7. <柯昀杰>
> [time=Sat, Jun 6, 2020 8:20 PM]
> 50還是跑不出來
#### 社長提供的測資:
雖然k最大50,但500跑得出來才行!
```
input:
50
500
```
```
output:
22876792454961,57771436741660
13086697590606049996055584044927596411194063175701640828433332451808337095546592569711085360860462837129622486793968164469385350610944,34772519808734217706618156541975932553872434308141159656813273390712961896118752966620210472553608828039306159443297283111318433300480
```
### 參考解答(社長提供):
#### C++:
```cpp=
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main(){
int k;
double temp_3,temp_4,count_3,count_4,last,sum;
while(cin >> k){
count_3=1;count_4=1;sum=0;
while(k--){
temp_3=pow(3,count_3);
temp_4=pow(4,count_4);
if(temp_3<temp_4){
sum+=temp_3;
last=temp_3;
count_3++;
}
else{
sum+=temp_4;
last=temp_4;
count_4++;
}
}
cout << setprecision(0) << fixed <<last << "," << sum << endl;
}
return 0;
}
```
### 參考解答(社員提供):
---
### 4.<font color="FF5233">[C-AR140-易] 求最大糧食產量</font>
#### =>[題目連結](https://e-tutor.itsa.org.tw/e-Tutor/mod/programming/view.php?a=12121)
#### 問題敘述:
有一張 MxN 的地圖,我們現在想要在地圖上挑一個地方建設城市,城市建設下去後,以城市為中心,向外拓展,不走斜角進行移動;
兩格的移動範圍內 ( 超出地圖的部分不計算 ) ,將成為城市腹地。請設計一個程式,當輸入每格的糧食產量 (1~5 ,包含城市本身 ) 後,能自動挑選出最佳的城市位址,使城市的腹地範圍內擁有最大的糧食產量,並輸出。
### 完成者:
1. <社長>
> [time=Sat, May 30, 2020 8:12 PM]
2. <吳冠毅>
> [time=Wed, Jun 3, 2020 11:58 AM]
3. <吳品範>
> [time=Sat, Jun 6, 2020 1:52 PM]
4. <陳宜俊>
> [time=Sat, Jun 6, 2020 3:34 PM]
#### 社長提供的測資:
突破題目限制的測資。
```
input:
8 8
1 2 3 8 6 4 2 1
9 3 5 6 7 8 9 2
1 2 3 4 5 6 7 8
6 4 3 2 1 3 3 2
9 9 9 9 8 8 7 7
1 0 0 0 9 8 6 4
8 8 8 8 8 8 8 8
6 3 8 3 2 0 0 0
```
```
output:
83
```
### 參考解答(社長提供):
#### Java:
```java=
import java.util.*;
//[C-AR140-易] 求最大糧食產量
//2019,08,27;18:41
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int M = sc.nextInt();
int N = sc.nextInt();
// 陣列擴充兩環
int[][] arr = new int[M + 4][N + 4];
int sum = 0;
int up, down, left, right;
int upperight, loweright, upperleft, lowerleft;
int up_2, down_2, left_2, right_2;
int[] result = new int[M * N];
for (int i = 2; i <= M + 1; i++)
for (int j = 2; j <= N + 1; j++)
arr[i][j] = sc.nextInt();
for (int i = 2, k = 0; i <= M + 1; i++) {
for (int j = 2; j <= N + 1; j++) {
sum = 0;
up = arr[i - 1][j];
down = arr[i + 1][j];
left = arr[i][j - 1];
right = arr[i][j + 1];
upperight = arr[i - 1][j + 1];
loweright = arr[i + 1][j + 1];
upperleft = arr[i - 1][j - 1];
lowerleft = arr[i + 1][j - 1];
up_2 = arr[i - 2][j];
down_2 = arr[i + 2][j];
left_2 = arr[i][j - 2];
right_2 = arr[i][j + 2];
sum += arr[i][j] + up + down + left + right + upperight + loweright + upperleft + lowerleft + up_2
+ down_2 + left_2 + right_2;
result[k++] = sum;
}
}
Arrays.sort(result);
// 印出最後一個(最大值)
System.out.println(result[result.length - 1]);
sc.close();
}
}
```
### 參考解答(社員提供):
---
### 5.<font color="#f00">[C_GD18-中] 誰最有名?</font>
#### =>[題目連結](https://e-tutor.itsa.org.tw/e-Tutor/mod/programming/view.php?a=19457)
#### 問題敘述:
找出被最多人認識的人。(<font color="#f00"> 變態的題目敘述都很短。</font>)
### 完成者:
1. <社長>
> [time=Sat, May 30, 2020 8:12 PM]
2. <吳冠毅>
> [time=Sat, Jun 6, 2020 2:38 PM]
> 外掛開著開著才寫了出了
#### 社長提供的測資:
```
input:
Y Y N N Y Y N Y
N N Y Y Y Y N Y
N N N N N Y Y N
N N Y Y N Y N N
Y Y Y Y Y Y Y Y
N N N N N N N N
```
```
output:
5
```
### 參考解答(社長提供):
#### C++:
```cpp=
#include <iostream>
#include <iomanip>
#include <sstream>
#include <algorithm>
#include <string.h>
#define MAX 20
using namespace std;
char know[MAX][MAX];
int main(){
int max_i=0;
int temp_j=0;
stringstream ss("");
string input;
while(!cin.eof()){
getline(cin,input);
ss.str("");
ss.clear();
ss << input;
temp_j=0;
while(ss>>know[max_i][temp_j++]){
//cout << know[max_i][temp_j-1] << " ";
}
//cout << endl;
max_i++;
}
int max_j=strlen(know[0]);
//cout << max_j << endl;
int table[max_j];
memset(table,0,sizeof(table));
for(int i=0;i<max_i;i++){
for(int j=0;j<max_j;j++){
if(know[i][j]=='Y')
table[j]++;
}
}
sort(table,table+max_j);
if(table[max_j-1]==table[max_j-2])
cout << "NO!" << endl;
else
cout << table[max_j-1] << endl;
return 0;
}
```
### 參考解答(社員提供):
---
## <font color="#FF030B2255">統計表
| 第一題 | 第二題 | 第三題 | 第四題 | 第五題 | 全對者 |
|:------:|:------:|:------:|:------:|:------:|:------:|
| 10 | 9 | 7 | 4 | 2 | 2 |
---
> [time=Sat, Jun 13, 2020 9:00 PM]
###### tags: `社內考試`