---
# System prepended metadata

title: 新鮮人程式實作學習社群
tags: [ISU111a, ISU]

---

# 新鮮人程式實作學習社群 
###### tags: `ISU111a` `ISU`
## 講義
### [講義連結](https://drive.google.com/drive/folders/1uBabMneprP5Kowo_ibDz02FR6ywFJVIt?usp=sharing)
## 練習平台
### [Zerojudge平台](https://zerojudge.tw/)
* 若無帳號，請到 Zerojudge 註冊帳號
  * 學校單位選(改)為義守大學
  * 進入「程式實作學習社群」課程
  * 從使用者選單 → 「加入課程」(課程代碼: 18z7+A)


## Lec. 01 程式實作檢測原理與平台講解
### 實作練習
#### [a737. 10041 - Vito's family -- UVa10041](https://zerojudge.tw/ShowProblem?problemid=a737)
- **題目**
  - [UVa onlinejudge出處](https://onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=982)
  - [Zerojudge收納](https://zerojudge.tw/ShowProblem?problemid=a737)
- **題意**
  - 有個人有很多親戚需要拜訪。想找一間離所有親戚家最近的房子，使得他拜訪所有親戚時，距離的總和是最小值。
（輸入測資後，求距離的最小值）
- **解法**
  - 差異絕對值相加，最小值出現在排好數列的中位數時，用中位數帶入即可。
  - 若資料個數為偶數，不需要取中間兩樹平均值，取中間任何一個數當基準計算即可。
  - 可以使用 C++ vector 做動態陣列，提升撰寫效率。
  - 可以使用 C++ algorithm 之 sort 排序，提升撰寫效率。
* C/C++ 參考題解
```cpp=
#include <stdio.h>
#include <stdlib.h>

int cmp(const void *a, const void *b) {
	return *(int *)a-*(int *)b;	
}

int main() {
	int n,i,j,r,s[500],m,sum;
	//1. 讀入Case數目(n)
	scanf("%d",&n);
	
	//2. 依次讀入每一個測試的資料
	for(i=0; i<n; i++) {
		//2.1 讀入親戚數(r)
		scanf("%d",&r);
		//2.2 讀入門牌號碼
		for(j=0; j<r; j++) 
			scanf("%d",&s[j]);
		//2.3 排序
		qsort(s,r,sizeof(int),cmp);
		//2.4 找中位數
		m = s[r/2];
		//2.5 計算距離
		sum = 0;
		for(j=0; j<r; j++) {
			if(s[j]-m>=0) sum+= (s[j]-m);
			else sum+= (m-s[j]);
		}
		//2.6 輸出
		printf("%d\n",sum);				
	}
	return 0;
} 

```
#### [a012. 10055 - Hashmat the Brave Warrior -- UVa10055](https://zerojudge.tw/ShowProblem?problemid=a012)
* C/C++ 參考題解
```cpp=

```

#### [c014. 10035 - Primary Arithmetic -- UVa10035](https://zerojudge.tw/ShowProblem?problemid=c014)
* C/C++ 參考題解
```cpp=

```
