(挑战编程_3_3)Common Permutation

http://www.programming-challenges.com/pg.php?page=downloadproblem&probid=110303&format=html

#include <iostream>
#include <cstdlib>
#include <vector>
#include <set>
#include <string>
#include <cstring>
#include <fstream>
#include <algorithm>


using namespace std;

//#define _MY_DEBUG_

// 暂存结果字符
char ans[1010];

/*
	MainStructure: 主结构
*/
void MainStructure();

/*
	Process:处理每一组数据
*/
void Process();

/*
	Handle:处理每一组中的每一个实例
*/
void Handle(string str1, string str2);

/*
	读取输入数据
*/
void Input();



/*
	输出结果
*/
void OutPut();

int main()
{
	MainStructure();
	return 0;
}

void MainStructure()
{
	
#ifdef _MY_DEBUG_
	string inputStr = "C:/Users/cao/Desktop/算法/要看的书/算法/2挑战编程/input/1.inp";
	//string inputStr = "D:/2挑战编程/input/110205.inp";
	string outputStr = "C:/Users/cao/Desktop/算法/要看的书/算法/2挑战编程/input/0000001.outp";
	ifstream fin;
	fin.open(inputStr);	

	cin.rdbuf(fin.rdbuf());	

	ofstream fout;
	fout.open(outputStr);

	//cout.rdbuf(fout.rdbuf());
#endif

	Process();
		
}

void Process()
{
	// 每两行作为一个输入,如果只有一行的则不处理
	string str1;
	string str2;
	string str;
	bool isSecond = false;
	while (getline(cin, str))
	{
		if (!isSecond)
		{
			str1 = str;
			isSecond = true;			
		}
		else
		{
			str2 = str;
			isSecond = false;
			// 计算并打印
			Handle(str1, str2);
		}
	}
}

void Handle(string str1, string str2)
{	
	memset(ans, 0, sizeof(ans));
	int index = 0;
	// 1.计算str1、str2的公共字母
	int len1 = str1.size();
	int len2 = str2.size();
	for (int i = 0; i < len1; ++i)
	{
		for (int j = 0; j < len2; ++j)
		{
			if (str1[i] == str2[j])
			{
				// 
				ans[index++] = str1[i];
				str2.erase(j, 1);
				--len2;
				break;
			}
		}
	}
	// 对ans进行排序
	sort(ans, ans + index);
	for (int i = 0; i < index; ++i)
	{
		cout << ans[i];
	}
	cout << endl;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++的next_permutation是一个STL函数,用于求一个序列的下一个字典序排列。它包含在头文件<algorithm>中。使用next_permutation函数可以方便地生成一个序列的所有可能排列。您可以通过传入一个数组和数组的大小来使用next_permutation函数。C++的STL库提供了next_permutation函数,它可以自动计算下一个排列,无需手动实现。要使用next_permutation函数,您需要包含<algorithm>头文件,并使用该函数进行迭代处理,直到没有下一个排列为止。手动实现next_permutation函数的方法是,首先找到一个逆序的位置,然后找到一个比该位置上元素大的元素,并将这两个元素交换位置,最后将逆序位置后面的元素颠倒顺序。这样就得到了下一个排列。通过不断重复这个过程,直到没有下一个排列为止。手动实现next_permutation函数的代码如下:<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [C++中 next_permutation 函数的使用方法、原理及手动实现](https://blog.csdn.net/m0_51913750/article/details/130540032)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [详谈全排列next_permutation() 函数的用法(推荐)](https://download.csdn.net/download/weixin_38651365/13784181)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值