## Missing Number
[題目連結](https://cses.fi/problemset/task/1083)
給定一整數 $n$,接下來一行有 $n-1$ 個整數 $a_i$,這 $n-1$ 個整數在 $1\sim n$
並且每個數字都不重複,請你找出缺少的那個數字並將其輸出,比如 $n = 3 ,a = \{1, 2\}$ 缺少 $3$
---
題目標籤 : 迴圈(排序)
本題提示 :
題解一可以去思考 $1~n$ 之和與缺少一數(題目)之間有甚麼關聯,並用基礎數字運算解決
題解二可以去判斷排序後的數字與缺少之數有什麼關聯
解題思路一 :
這題說給 $1~n$ 但是少給一個,問少給的那個是哪一個,如果我們去看 $1~n$ 的和(如下圖)

像是積木一樣,所以只要統計積木的數量就是 $1~n$ 的和,如果今天積木少了幾塊(缺少某個數字)
就只要統計積木的數量跟 $1~n$ 的和差多少就知道少幾塊積木(少哪個數字)
也可以說如果用 $1~n$ 的和 $-$ 所有積木的塊數就知道少幾塊積木,也就知道答案
```cpp=
#include<bits/stdc++.h>
using namespace std ;
typedef long long LL ;
int main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0) ;
LL n, now, tmp ;
cin >> n ;
tmp = (1+n)*n / 2 ; // 1~n 之和
for (int i=0;i<n-1;i++) { // 最後剩下的數(積木少幾塊)為題目要求
cin >> now ;
tmp -= now ;
}
cout << tmp << '\n' ;
return 0 ;
}
```
解題思路二 :
如果題目給定數字被排序過後呢,因為缺少一個數字,所以我們在陣列往後找的過程當中一定會找不到某數
也就是說,排序後找不到的那個數字就是答案
```cpp=
#include<bits/stdc++.h>
using namespace std ;
int num[200005] ;
int main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0) ;
int n ;
cin >> n ;
for (int i=1;i<=n-1;i++) // 從 1 開始可以對應題目 1~n
cin >> num[i] ;
sort(num+1, num+n) ; // 排序
for (int i=1;i<=n;i++) {
if (num[i] != i) { // 數字不對 => 缺少某數 => 答案
cout << i ;
return 0 ;
}
}
}
```