由
1, 2, 3, 4, 5, 6
组成的每一位都不相同的三位数按照从小到大的顺序排列,计算第
100100
的数和第
90
90 个数的差。
/*
最初做我是从后往前一个一个把数写出来的
做完后想了想, 排列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;// 要回溯
}
}