[保研/考研機試] KY43 全排列 北京大學復試上機題 C++實現

題目鏈接:

全排列icon-default.png?t=N6B9https://www.nowcoder.com/share/jump/437195121692001512368

描述

給定一個由不同的小寫字母組成的字符串,輸出這個字符串的所有全排列。 我們假設對于小寫字母有'a' < 'b' < ... < 'y' < 'z',而且給定的字符串中的字母已經按照從小到大的順序排列。

輸入描述:

輸入只有一行,是一個由不同的小寫字母組成的字符串,已知字符串的長度在1到6之間。

輸出描述:

輸出這個字符串的所有排列方式,每行一個排列。要求字母序比較小的排列在前面。字母序如下定義: 已知S = s1s2...sk , T = t1t2...tk,則S < T 等價于,存在p (1 <= p <= k),使得 s1 = t1, s2 = t2, ..., sp - 1 = tp - 1, sp < tp成立。 每組樣例輸出結束后要再輸出一個回車。

示例1

輸入:

abc

輸出:

abc
acb
bac
bca
cab
cba

方法一 遞歸:

思路:

  1. 定義遞歸函數 generatePermutations,其中參數 prefix 表示當前已生成的前綴,參數 remaining 表示剩余的字符。
  2. 如果剩余字符串只有一個字符,將前綴和剩余字符拼接輸出。
  3. 否則,遍歷剩余字符,分別將當前字符作為前綴的一部分,然后遞歸調用生成剩余部分的全排列。
  4. main 函數中,讀入輸入的字符串,調用遞歸函數生成全排列。

源代碼:

#include<iostream>
using namespace std;// 遞歸函數,用于生成字符串的全排列
void generatePermutations(string prefix, string remaining) {if (remaining.size() == 1) {// 如果剩余字符串只有一個字符,將前綴和剩余字符拼接輸出cout << prefix + remaining << endl;return;}// 遍歷剩余字符,分別將當前字符作為前綴的一部分,繼續遞歸生成全排列for (int i = 0; i < remaining.size(); i++) {string newPrefix = prefix + remaining[i]; // 當前字符作為前綴的一部分string newRemaining = remaining; // 拷貝剩余字符串newRemaining.erase(i, 1); // 刪除當前字符,得到新的剩余字符串generatePermutations(newPrefix, newRemaining); // 遞歸調用生成全排列}
}int main() {string s;cin >> s; // 輸入字符串generatePermutations("", s); // 調用遞歸函數生成全排列return 0;
}

方法二 使用內置全排列函數:

next_permutation 函數的作用:

  • next_permutation 是 C++ 標準庫中的一個函數,用于生成給定序列的下一個排列,以字典序的方式。
  • 如果當前排列是字典序的最后一個排列,next_permutation 返回 false,否則返回 true 并生成下一個排列。
  • 在生成下一個排列時,會將當前排列修改為下一個排列。
  • next_permutation 函數接受兩個迭代器作為參數,表示需要生成排列的范圍。

源代碼:

#include <iostream>
#include <algorithm> // 包含了 sort 和 next_permutation 函數
using namespace std;int main() {string s;while (cin >> s) { // 循環讀取輸入的字符串cout << s << endl; // 輸出初始字符串sort(s.begin(), s.end()); // 將字符串按照字典序排序// 使用 next_permutation 生成剩余的全排列并輸出for (; next_permutation(s.begin(), s.end());) {cout << s << endl;}cout << endl; // 每組樣例輸出結束后輸出一個回車}return 0;
}

提交結果:

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/42961.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/42961.shtml
英文地址,請注明出處:http://en.pswp.cn/news/42961.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Docker vs. Kubernetes:選擇合適的場景

在決定使用 Docker 還是 Kubernetes 之前&#xff0c;讓我們看看一些實際的場景&#xff0c;以便更好地理解它們的適用性。 使用 Docker 的場景 假設您正在開發一個微服務應用程序&#xff0c;其中每個微服務都需要一些特定的依賴項和環境。在這種情況下&#xff0c;Docker 是一…

HJ6 質數因子

描述 功能:輸入一個正整數&#xff0c;按照從小到大的順序輸出它的所有質因子&#xff08;重復的也要列舉&#xff09;&#xff08;如180的質因子為2 2 3 3 5 &#xff09; 數據范圍&#xff1a; 1≤n≤210914 1≤n≤210914 輸入描述&#xff1a; 輸入一個整數 輸出描述&…

學習Vue:聲明式路由和程序式路由

在Vue.js中&#xff0c;路由與導航是構建單頁應用程序&#xff08;SPA&#xff09;的關鍵概念。在使用Vue Router時&#xff0c;您可以使用兩種方式來進行路由與導航&#xff1a;聲明式路由和程序式導航。本文將詳細介紹這兩種方式&#xff0c;幫助您理解它們的用法和優勢。 聲…

Ceph入門到精通-Aws Iam(user,role,group,policy,resource)架構圖和快速入門

-- Aws Iam(identity,user,role,group,policy,resource,)架構圖和快速入門. 【官網】&#xff1a;Cloud Computing Services - Amazon Web Services (AWS) 應用場景 aws 云服務運維,devops過程中經常涉及各項服務&#xff0c;權限&#xff0c;角色的處理。 為了更好的使用各項…

Redis在Java中的基本使用

本片將介紹 Redis 在 Java 中的基本使用 文章目錄 1、使用jedis操作redis1.1、Jedis簡介1.2、引入jedis的Maven依賴1.2、獲取連接1.3、使用實例 2、對于JedisPooled的使用2.1、使用JedisPooled2.2、關于連接池 3、SpringBoot下使用Redis3.1、引入Maven依賴3.2、配置Redis連接3.…

mac m1上系統內錄內部聲音的方法/無需安裝Blackhole

總所周知&#xff0c;m1的mac不能錄制桌面音頻&#xff0c;obsstudio都不行。 最快的解決方法就是下載飛書&#xff1a; 登陸后新建直播/視頻會議&#xff1a; 共享的時候選擇下面的兩個鉤上去就好了

6.RocketMQ之索引文件ConsumeQueue

本文著重分析為consumequeue/topic/queueId目錄下的索引文件。 1.ConsumeQueueStore public class ConsumeQueueStore {protected final ConcurrentMap<String>, ConcurrentMap<Integer>, ConsumeQueueInterface>> consumeQueueTable;public boolean load(…

【BUG】docker安裝nacos,瀏覽器卻無法訪問到頁面

個人主頁&#xff1a;金鱗踏雨 個人簡介&#xff1a;大家好&#xff0c;我是金鱗&#xff0c;一個初出茅廬的Java小白 目前狀況&#xff1a;22屆普通本科畢業生&#xff0c;幾經波折了&#xff0c;現在任職于一家國內大型知名日化公司&#xff0c;從事Java開發工作 我的博客&am…

Socks5、IP代理在爬蟲開發與HTTP通信中的應用

隨著互聯網的不斷發展&#xff0c;代理服務器成為網絡工程師和數據爬蟲開發者的關鍵工具。本文將深入探討Socks5代理、IP代理以及它們在網絡安全、爬蟲開發和HTTP通信中的重要作用。 1. 代理服務器&#xff1a;保障隱私與安全的中間人 代理服務器是位于客戶端與目標服務器之間…

object獲取的兩種方式/Object.keys使用/解構賦值

object獲取的兩種方式&#xff1a; data() {return {abj: {aa: {A: 1}}}},created() {console.log(this.abj.aa) //第一種console.log(this.abj["aa"]) //第二種}, Object.keys使用/解構賦值&#xff1a; return {footList: [],abj: {aa: {A: 12,AA:22},bb: {…

軟件工程概述-架構師(三)

軟件工程概述&#xff08;老版&#xff09; 軟件開發生命周期&#xff1a; 軟件定義時期&#xff1a;包括 可行性研究和詳細需求分析過程&#xff0c;任務是軟件工程必需完成的目標&#xff0c;具有可行問題分析、可行性研究、需求分析等。軟件開發時期&#xff1a;軟件的 設…

20230818 數據庫自整理部分

并發事務 臟讀 一個事務讀取到另一事務還沒有提交的數據 事務B讀取了事務A還沒有提交的數據 不可重復讀 一個事務先后讀取同一條記錄&#xff0c;但是兩次讀取的數據不同&#xff0c;稱之為不可重復讀 查詢出來的數據不一樣 1步驟b還沒有提交 3步驟b已經提交 幻讀 一個…

SOLIDWORKS 2023中裝配體配合的正確使用方法 碩迪科技

-SOLIDWORKS 裝配體打開時是由不同的階段和性能檢查組成的。如果在創建裝配體時未應用基本的配合方法&#xff0c;問題會隨著時間的推移而累積&#xff0c;并且在使用時會出現明顯的速度減慢。 如果您的裝配體運行速度很慢&#xff0c;則很可能是在創建配合時出現了不良操作的癥…

C#如何遍歷類的屬性,并獲取描述/注釋

要獲取屬性的描述/注釋&#xff0c;需要使用System.ComponentModel命名空間中的DescriptionAttribute。可以通過反射獲取屬性上的DescriptionAttribute&#xff0c;并獲取其Description屬性值。 首先&#xff0c;需要引入System.ComponentModel命名空間&#xff1a; using Sy…

貝葉斯推理問題、MCMC和變分推理

一、說明 1.1 介紹 貝葉斯推理是統計學中的一個主要問題&#xff0c;在許多機器學習方法中也會遇到。例如&#xff0c;用于分類的高斯混合模型或用于主題建模的潛在狄利克雷分配都是在擬合數據時需要解決此類問題的圖形模型。 同時&#xff0c;可以注意到&#xff0c;貝葉斯推…

vscode ssh 遠程 gdb 調試

一、點運行與調試&#xff0c;生成launch.json 文件 二、點添加配置&#xff0c;選擇GDB 三、修改啟動程序路徑

Python自動化實戰之使用Selenium進行Web自動化詳解

概要 為了完成一項重復的任務&#xff0c;你需要在網站上進行大量的點擊和操作&#xff0c;每次都要浪費大量的時間和精力。Python的Selenium庫就可以自動化完成這些任務。 在本篇文章中&#xff0c;我們將會介紹如何使用Python的Selenium庫進行Web自動化&#xff0c;以及如何…

Kubernetes網絡組件詳解

目錄 1、Kubernetes網絡組件 1.1、Flannel網絡組件 1.2、Calico 網絡插件 2、環境準備 2.1、主機初始化配置 2.2、部署docker環境 3、部署kubernetes集群 3.1、組件介紹 3.2、配置阿里云yum源 3.3、安裝kubelet kubeadm kubectl 3.4、配置init-config.yaml 3.5、安裝…

jenkinsfile自動部署接口

復制創建新流水線 從預先創建的job中獲取 config.xml 或根據需要創建另一個 curl -X GET http://xxx.xxx.xxxx.com/job/backup-data/config.xml -u test:xxxxxxxxxxxxxxxxxx-o config.xml 生成Crumb CRUMB$(curl -s http://xxxxxxx.xxx.xxx.com/crumbIssuer/api/xml?xpathc…

精彩回顧 | 迪捷軟件出席2023ATC汽車電子與軟件技術周

2023年8月18日&#xff0c;由ATC汽車技術會議主辦&#xff0c;上海市集成電路行業協會支持的“2023ATC汽車電子與軟件技術周”在上海市圓滿落幕。迪捷軟件上海參展之行圓滿收官。 ▲開幕式 本次峰會匯聚了整車廠、汽車零部件集團、軟硬件方案提供商、軟件工具供應商、軟件測試…