[C++] 全排列

44次阅读
没有评论

共计 563 个字符,预计需要花费 2 分钟才能阅读完成。

题面

有 1∼n 这 n(n<10)个数,现将这 n 个数组成一个 n 位的数,每个数只能用一次,例如 n=2,则 12,21 等都是符合条件的数,但 11 和 22 不行。问,输入 n 后,将符合条件的所有的 n 位数输出,且按照从小到大顺序输出。

输入描述

一个正整数 n。

输出描述

按从小到大输出所有的全排列数,每行一个数(中间用空格隔开)。

样例

输入

2

输出

1 2
2 1

答案

#pragma GCC optimize(3)
#include <iostream>
#include <string>
using namespace std;

void dfs(string str, string choices){if(choices.length()==0){
        cout << str << endl;
        return;
    }
    for(int i=0;i<choices.length();i++){dfs(str+(str.length()?"":"")+choices[i], choices.substr(0,i)+choices.substr(i+1));
    }
}

int main(){ios::sync_with_stdio(false);
    cin.tie(0);

    int t; cin >> t;
    string c = "";
    for(int i=1;i<=t;i++) c += to_string(i);

    dfs("", c);

    return 0;
}
正文完
 0
元素
版权声明:本站原创文章,由 元素 于2024-10-23发表,共计563字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
验证码