题意:给出一个长度不超过1000的字符串S,假设将其升序排后形成的字符串为T,要求对T进行不超过10000次操作将其变成S,每次操作给出两整数A,B,如果A位置的字符不小于B位置的字符则交换两个位置的字符
思路:选择排序,逆序输出即可
代码如下:
#include<bits/stdc++.h>
using namespace std;
int n,coun,a[10010][2];
char s[1010];
int main()
{
scanf("%s",s);
n=strlen(s);
for(int i=0;i<n;i++){
int k=i;
for(int j=i+1;j<n;j++)
{
if(s[j]<s[k])
k=j;
}
if(k!=i){
a[coun][0]=i;
a[coun][1]=k;
coun++;
swap(s[i],s[k]);
}
}
// printf("%d***\n",coun);
for(int i=coun-1;i>=0;i--)
printf("%d %d\n",a[i][1]+1,a[i][0]+1);
return 0;
}
博客围绕一个字符串排序问题展开,给定长度不超1000的字符串S,将其升序排列成T后,要通过不超10000次操作把T变回S,每次操作按特定规则交换字符位置。解题思路是选择排序并逆序输出,还给出了代码。

被折叠的 条评论
为什么被折叠?



