解题思路:

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

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

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

注意事项:

参考代码:

#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.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论