ganmu


私信TA

用户名:dotcpp0726067

访问量:3464

签 名:

等  级
排  名 1522
经  验 2809
参赛次数 0
文章发表 104
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

解题思路:

本题看似交换,其实可以只比较交换前的数,即用下标找到交换前的数,若前面的数>后面的数,则交换后的数必然小于交换前的数,即符合条件

交换时可先用第一个和最后一个交换,即比较第一个数和最后一个的大小,若大,则满足题目条件,再比较第一个数和倒数第二个数的大小,以此类推。。。

若出现相等的情况,则将第一个数和最后一个数的下标分别++和--,即向下一位移位,再次比较,找到结果即可

注意事项:

参考代码:

#include<iostream>

using namespace std;

string s;

int sum = 0;//用于计数

int dfs(int l,int r)//自定义函数,用于计算较小值

{

while (l < r)

{

if (s[l] > s[r])//当左边的下标小于右边下标且左边值较大的时候,返回1

return 1;

else if (s[l] == s[r])

{

l++; r--;

}

else

break;

}

return 0;//若上述条件不满足则返回0

}

int main()

{

cin >> s;

int n = s.length();//求出字符串长度

for (int left = 0; left < n; left++)//左边下标从0~n

{

for (int right = n - 1; right > left; right--)//右边下标从左边下标到最右边

{

if(dfs(left, right))sum++;//当成立时,则计数器++

}

}

cout << sum;

return 0;

}


 

0.0分

1 人评分

  评论区

  • «
  • »