A题(签到)
题目链接
https://codeforces.com/contest/1552/problem/A
题意:
给我们一个长度为n的字符串,我们选出其中k个字母,对这k个字母进行操作,使这个字符串变为按字母表顺序排列的
求最小的k;
思路:
1.刚开始的错误思路;
想着遍历一遍,记录每个字母出现的次数,
将字符串变为按顺序排列后,记录每个字母应该对应的位置,也就是i
再将原字符串遍历,找到对应位置字母不同的k++
这么写十分的复杂易错;
2.ac 代码的思路
将原字符串排序,将两个字符串逐字符对比,不同的k++输出k即可;
#include <bits/stdc++.h>
using namespace std;
char a[50];
int main()
{
int t;
cin>>t;
char m;
while(t--)
{
string s,a,b;
int n;
cin>>n>>s;
int k=0;
b=s;
for(int i=0;i<n-1;i++)//比较的趟数
{
for(int j=i+1;j<n;j++)//每趟比较的次数
if (s[i] > s[j])
{
m = s[j];
s[j] = s[i];
s[i] = m;
}
}
a=s;
for(int i=0;i<n;i++)
{
if(a[i]!=b[i]) k++;
}
cout<<k<<endl;
}
}