解题思路:
本题看似交换,其实可以只比较交换前的数,即用下标找到交换前的数,若前面的数>后面的数,则交换后的数必然小于交换前的数,即符合条件
交换时可先用第一个和最后一个交换,即比较第一个数和最后一个的大小,若大,则满足题目条件,再比较第一个数和倒数第二个数的大小,以此类推。。。
若出现相等的情况,则将第一个数和最后一个数的下标分别++和--,即向下一位移位,再次比较,找到结果即可
注意事项:
参考代码:
#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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复