1, 2, 3, 4, 5, 6
組成的每一位都不相同的三位數按照從小到大的順序排列,計算第 100100 的數和第 9090 個數的差。
/*
最初做我是從後往前一個一個把數寫出來的
做完後想了想, 排列permutation(6, 3) = 120
每個數開頭都有120/6 = 20
第90大和第100大都是5開頭的, 並且剩下的兩位是permutation(5, 2)
這樣比較好找出來答案
後來發現dfs的做法
*/
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
const int maxn = 10;
int n = 6;
int seq[maxn];
int visited[maxn];
vector<int> ans;
void dfs(int cnt);
void count();
int main() {
for(int i = 0; i < 6; ++i)
seq[i] = i + 1;
dfs(0);// 從第0位開始
cout <<
// 在下方填入答案
564 - 532
<< endl;
// cout << ans[100 - 1] - ans[90 - 1] << endl; // dfs
return 0;
}
void count()
{// 通過1是百位, 2是十位, 3是個位去計算排列的值
int sum = 0;
for(int i = 0; i < 6; ++i){
switch(visited[i]){
case 0:
break;
case 1:
sum += seq[i] * 100;
break;
case 2:
sum += seq[i] * 10;
break;
case 3:
sum += seq[i];
break;
default:
break;
}
}
ans.push_back(sum);
}
void dfs(int cnt)
{
if(cnt == 3){// 到第3位結束
count();
return;
}
for(int i = 0; i < n; ++i)
if(visited[i] == 0){
visited[i] = cnt + 1;// visited = 1是第一次選擇的, 表示百位數
dfs(cnt + 1);
visited[i] = 0;// 要回溯
}
}