zoukankan      html  css  js  c++  java
  • 有重复元素的排列问题

    有重复元素的排列问题 
    【问题描述】
           设R={ r1, r2 , …, rn}是要进行排列的n个元素。其中元素r1, r2 , …, rn可能相同。试设计一个算法,列出R的所有不同排列。
    【编程任务】
           给定n 以及待排列的n 个元素。计算出这n 个元素的所有不同排列。
    【输入格式】
           由perm.in输入数据。文件的第1 行是元素个数n,1≤n≤500。接下来的1 行是待排列的n个元素。
    【输出格式】
           计算出的n个元素的所有不同排列输出到文件perm.out中。文件最后1行中的数是排列总数。
    【输入样例】
    4
    aacc
    【输出样例】多解
    aacc
    acac
    acca
    caac
    caca
    ccaa
    6
    代码如下:
    /*跟排列组合相似,只需加一个计数器避免重复*/

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    using namespace std;
    int search(int);
    int sum;
    int print();
    bool b[600];
    int n,count[100];
    string s;
    char q[100];
    int main()
    {
    cin>>n>>s;
    for(int i=0;i<n;i++)
    {
    count[s[i]-96]++;//记录出现的次数
    }
    search(0);
    cout<<sum<<endl;
    return 0;
    }
    int print()
    {
    sum++;
    for(int i=0;i<n;i++)
    cout<<q[i];
    cout<<endl;
    }
    int search(int x)
    {
    for(int i=1;i<=26;i++)
    {
    if(count[i])//仍出现
    {
    q[x]=s[i-1];
    count[i]--;
    if(x==n-1)print();
    else
    search(x+1);
    count[i]++;
    }
    }
    }

  • 相关阅读:
    MySQL 分组
    MySQL LIKE 子句
    MySQL DELETE 语句
    MySQL UPDATE 查询
    MySQL where 子句
    MySQL 插入数据
    MySQL 查询数据
    MySQL 删除数据表
    MySQL 创建数据表
    MySQL 数据类型
  • 原文地址:https://www.cnblogs.com/zzyh/p/6609494.html
Copyright © 2011-2022 走看看