三位數

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;// 要回溯
        }

}

發佈了46 篇原創文章 · 獲贊 2 · 訪問量 6917
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章