zoukankan      html  css  js  c++  java
  • 不重复排列

    输入n个数值,输出由这n个数构成的排列,不允许出现重复的项

    输入

    3

    1 1 2

    输出

    1 1 2

    1 2 1

    2 1 1

    代码

     1 #include<cstdio>
     2 #include<cstring>
     3 using namespace std;
     4 const int maxn = 100;
     5 int rcd[maxn],num[maxn],vis[maxn];
     6 int n,m;
     7 int read_input()
     8 {
     9     if(scanf("%d",&n)==EOF)
    10         return 0;
    11     m=0;
    12     memset(vis,0,sizeof(vis));
    13     int i,j;
    14     for( i=0;i<n;i++){
    15         int val;
    16         scanf("%d",&val);
    17         for( j=0;j<m;j++)
    18             if(num[j]==val){
    19                 vis[j]++;
    20                 break;
    21             }
    22         if(j==m){
    23             num[j]=val;
    24             vis[m++]++;
    25         }
    26 
    27     }
    28     return 1;
    29 }
    30 void unrepeat(int l){
    31 
    32     if(l==n){
    33         for(int i=0;i<n;i++){
    34             printf("%d",rcd[i]);
    35             if(i<n-1)
    36                 printf(" ");
    37         }
    38         printf("
    ");
    39         return ;
    40     }
    41     for(int i=0;i<m;i++)
    42         if(vis[i]>0){
    43             vis[i]--;
    44             rcd[l]=num[i];
    45             unrepeat(l+1);
    46             vis[i]++;
    47         }
    48 
    49 }
    50 int main(){
    51     while(read_input())
    52         unrepeat(0);
    53 
    54     return 0;
    55 }
    View Code

    利用STL的代码:

     1 #include<cstdio>
     2 #include<algorithm>
     3 using namespace std;
     4 const int MAXN = 1000 ;
     5 int num[MAXN];
     6 int n;
     7 int input()
     8 {
     9     if(scanf("%d",&n)!=1)
    10         return 0;
    11     for(int i=0;i<n;i++)
    12         scanf("%d",&num[i]);
    13     return 1;
    14 
    15 }
    16 int main()
    17 {
    18     while(input())
    19     {
    20        sort(num,num+n);
    21        do
    22        {
    23            for(int i=0;i<n;i++)
    24                 printf("%d ",num[i]);
    25             printf("
    ");
    26        } while(next_permutation(num,num+n));
    27     }
    28     return 0;
    29 }
    View Code
  • 相关阅读:
    数据库插入
    c#里面调用python
    抓取最好大学网
    selenium抓取慕课课程
    excel合并
    网页抓取
    pyinstaller打包报错
    获取微信联系人
    c#部分类
    C#只读属性
  • 原文地址:https://www.cnblogs.com/hnuicpc0212/p/3163561.html
Copyright © 2011-2022 走看看