7-7 有重复元素的全排列 (10 分)(set容器做法思路加详解)
生活随笔
收集整理的這篇文章主要介紹了
7-7 有重复元素的全排列 (10 分)(set容器做法思路加详解)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一:題目
計(jì)算給定的n個(gè)數(shù)有多少種排列方式,即求全排列(可能出現(xiàn)重復(fù)的元素)
輸入格式:
第一行輸入數(shù)字的數(shù)量n(n>2),第二行給出每一個(gè)數(shù)字。
輸出格式:
一個(gè)數(shù)字,不同排列方式的數(shù)量。
輸入樣例:
3 1 2 2結(jié)尾無(wú)空行
輸出樣例:
結(jié)尾無(wú)空行
二:思路
在全排列的基礎(chǔ)上,我將輸出的數(shù)據(jù)存放在set容器當(dāng)中,這個(gè)容器有自動(dòng)去重功能,故可以最后直接輸出這個(gè)容器的大小即可;
三:上碼
#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類(lèi)型的數(shù)據(jù)轉(zhuǎn)換成string類(lèi)型,實(shí)現(xiàn)字符串的拼接 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];//輸入的單個(gè)的數(shù)字 for(int i = 0; i < N; i++){int nums;cin >> nums;arr[i] = nums;}perm(arr,0,N-1);cout << s.size();}總結(jié)
以上是生活随笔為你收集整理的7-7 有重复元素的全排列 (10 分)(set容器做法思路加详解)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 苹果 macOS / iOS 修图工具
- 下一篇: Canalys:2024 年全球智能手机