数字排列问题

贵有恒,何必三更起五更眠;最无益,莫过一日曝十日寒。

数字排列问题

时间限制: 1 Sec  内存限制: 128 MB

题目描述

列出所有从数字1到数字n的连续自然数的排列,要求所产生的任一数字序列中不允许出现重复的数字。

输入

n(1≤n≤9)

输出

由1~n组成的所有不重复的数字序列,每行一个序列。

样例输入

3

样例输出

    1    2    3
    1    3    2
    2    1    3
    2    3    1
    3    1    2
    3    2    1

用了next_permutation()函数字典序排列,对应的有一个排序顺序相反的函数prev_permutation()

#include <iostream>
#include <algorithm>

using namespace std;
int n;
int l[10];

int main()
{
    cin>>n;
    for(int i=0;i<=n;i++)
        l[i-1]=i;
    do
    {
        for(int i=0;i<n;i++)
            cout<<"    "<<l[i];
        cout<<endl;
    }while(next_permutation(l,l+n));
    return 0;
}

				
时间: 2024-11-04 23:13:39

数字排列问题的相关文章

回溯法第1题—数字排列问题

[问题描述] 列出所有从数字1到数字n的连续自然数的排列,要求所产生的任一数字序列中不允许出现重复的数字. 输入:n(1<=n<=9) 输出:由1~n组成的所有不重复的数字序列,每行一个序列. [样例输入] 3 [样例输出] 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 [问题分析] 这题要求输出n个数的全排列(从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列.当m=n时所有的排列情况叫全排列). 显然也没有什

一个能将给定非负整数数组中的数字排列成最大数字的函数

最近在网上看到这样一个题目,自己琢磨了一下. java version "1.8.0_40" // 编写一个能将给定非负整数数组中的数字排列成最大数字的函数. // 例如,给定[50,2,1,9],最大数字为95021. public class Sort { public static void main(String args[]){ int number[] = {1,2,3,32,335,34,7,6,9}; int number1[] = {312,321,3354,222,

【回溯】数字排列问题

问题 S: [回溯]数字排列问题 时间限制: 1 Sec  内存限制: 128 MB提交: 11  解决: 9[提交][状态][讨论版] 题目描述 列出所有从数字1到数字n的连续自然数的排列,要求所产生的任一数字序列中不允许出现重复的数字. 输入 n(1≤n≤9) 输出 由1~n组成的所有不重复的数字序列,每行一个序列. 样例输入 3 样例输出 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 解题思路: 跟n皇后解法很类似,写递归函数,找好退出条件. 代码: #inclu

蓝桥杯 - 数字排列(今有7对数字) - [DFS]

今有7对数字:两个1,两个2,两个3,...两个7,把它们排成一行.要求,两个1间有1个其它数字,两个2间有2个其它数字,以此类推,两个7之间有7个其它数字.如下就是一个符合要求的排列: 17126425374635 当然,如果把它倒过来,也是符合要求的. 请你找出另一种符合要求的排列法,并且这个排列法是以74开头的. 注意:只填写这个14位的整数,不能填写任何多余的内容,比如说明注释等. 答案: 74151643752362 解法1: 按照n=1~7进行DFS:我们每次尝试在当前存在的若干空位

数字排列

今有7对数字:两个1,两个2,两个3,...两个7,把它们排成一行.要求,两个1间有1个其它数字,两个2间有2个其它数字,以此类推,两个7之间有7个其它数字.如下就是一个符合要求的排列: 17126425374635 当然,如果把它倒过来,也是符合要求的. 请你找出另一种符合要求的排列法,并且这个排列法是以74开头的. 注意:只填写这个14位的整数,不能填写任何多余的内容,比如说明注释等. 答案: 代码: #include <iostream> #include <cstdio>

算法设计与分析 5.3 数字排列

★题目描述 给两个正整数A和B,请问通过重新排列A获得小于或等于B的最大数字是多少(不含前导0)? ★输入格式 输入的第一行两个数字A和B,保证这两个数字在int范围内. ★输出格式 输出A重新排列后小于或等于B的最大整数(不含前导0),若不存在输出-1. ★样例输入 1234 3456 ★样例输出 3421 ★提示 无 ★参考代码 /* 全排列用 prev_permutation 函数实现 */ /* 全排列用 prev_permutation 函数实现 string转int用 atoi 函数

用递归写排列组合问题

最近递归弄的人头疼,但是这两天看过来也稍微总结了一些不能称得上是技巧的技巧吧 问题如下,将1,2,3,4这四个数字排列组合的输出来,看网上有个很二的方法吧,就是将10000以内的数全部输出再筛选,对此有点无语,但是程序倒是挺好编的,嘿嘿 回归到正题中,用递归的思想解决 (1)采用旋转数字的方法,当步长为1时,1234还是1234,步长为2的时候,1234可以变为1243.1324...,步长为3 的时候,1234可以变为1423,诸如此类,最重要的能体现递归的就是将每次递归一次的数字还可以接着旋

【以前的空间】bzoj 1072 [SCOI2007]排列perm

又颓废了一个下午,最近撸mc撸到丧失意识了,玩的有点恶心,于是找水题做,瞧不起颓废的自己啊. another水题. 这题题意很明显啦,就是找数字排列后组成的数去mod d=0后有多少种. 普通的搜索的话,是会tle的(应该是o(n!)没错?).注意到长度n还是比较小的,于是想到状压dp. 状态就是每个数取和不取组成的结果(就是00110表示第3,4个数取了啦,学过状压都知道). 然后转移就是f[i,j,k]表示现在取到第i个数状态为i余数为j有多少种情况, 那么f[i,j,(k*10+a[i])

安卓旅途之——开发数独(一)

安卓旅途之——开发数独(一) 数独游戏简介 数独游戏,是一种数学智力拼图游戏,是“独立的数字游戏”的简称,源自18世纪末的瑞士,后在美国发展,在日本得以发扬光大. 数独游戏可以训练玩家的逻辑推理能力,不少教育者皆认为数独是锻炼脑筋的好方法. 其规则如下: 1.游戏会从一个部分带有数字的九宫格开始. 在9×9的大九宫格(即3格宽×3格高)方阵里,每一格又细分为一个小九宫格. 2.游戏开始,已给定若干数字,其它宫位留白,玩家需要自己按照逻辑推敲出剩下的空格里是什么数字. 3.填数字时必须满足以下条件