解题思路:
本题看似交换,其实可以只比较交换前的数,即用下标找到交换前的数,若前面的数>后面的数,则交换后的数必然小于交换前的数,即符合条件
交换时可先用第一个和最后一个交换,即比较第一个数和最后一个的大小,若大,则满足题目条件,再比较第一个数和倒数第二个数的大小,以此类推。。。
若出现相等的情况,则将第一个数和最后一个数的下标分别++和--,即向下一位移位,再次比较,找到结果即可
注意事项:
参考代码:
#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 人评分
大小写转换 (C语言代码)浏览:859 |
C语言程序设计教程(第三版)课后习题6.11 (C语言代码)浏览:549 |
母牛的故事 (C语言代码)浏览:551 |
C语言程序设计教程(第三版)课后习题10.1 (C语言代码)浏览:567 |
1013题解浏览:560 |
C语言程序设计教程(第三版)课后习题5.5 (C语言代码)浏览:557 |
简单的事情 (C语言代码)浏览:638 |
上车人数 (C语言代码)浏览:713 |
简单的a+b (C语言代码)浏览:466 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:456 |