题意:给出一个长度不超过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;
}