赞
踩
计算给定的n个数有多少种排列方式,即求全排列(可能出现重复的元素)
输入格式:
第一行输入数字的数量n(n>2),第二行给出每一个数字。
输出格式:
一个数字,不同排列方式的数量。
输入样例:
3
1 2 2
结尾无空行
输出样例:
3
结尾无空行
在全排列的基础上,我将输出的数据存放在set容器当中,这个容器有自动去重功能,故可以最后直接输出这个容器的大小即可;
#include<bits/stdc++.h> using namespace std; int N; set<string>s; void swap(int A[],int i,int j){ int temp = A[i]; A[i] = A[j]; A[j] = temp; } string printarr(int arr[]){ //将int类型的数据转换成string类型,实现字符串的拼接 stringstream st; for(int i = 0; i < N; i++){ st << arr[i]; } string str = st.str(); return str; } void perm(int A[],int p,int q){ if(p == q){ string str = printarr(A); s.insert(str); }else{ for(int i = p; i <= q; i++){ swap(A,p,i); perm(A,p+1,q); swap(A,p,i); } } } int main(){ cin >> N; int arr[10]; //输入的单个的数字 for(int i = 0; i < N; i++){ int nums; cin >> nums; arr[i] = nums; } perm(arr,0,N-1); cout << s.size(); }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。