解题思路:因为题目中是连续子序列,所以两个循环确定头尾,如果头大于尾,则肯定交换后小于之前数。如:54321交换后为12345。
但是我们会碰到头尾相等的。如14321,那就比较第二个和倒数第二个这里就是比较4,2。但是如果还是相等,那就通过递归,直到两个数不相等,或者一直相等。
如果前大于后,则返回1使n加一。如果前小于后或者前一直等于后,则返回0,不改变n的值。最后输出n就行。整体思路就是这样。
注意事项:我的代码可能不够简便。希望大家提意见。
参考代码:
#include<stdio.h>
#include<stdlib.h>
int dg(char x[],int n)
{
int i=0;
if(n<=0)
{
return 0;
}
if(x[i]>x[n])
{
return 1;
}
if(x[i]==x[n])
{
dg(x+1,n-2);
}
if(x[i]<x[n])
{
return 0;
}
}
int main()
{
char *p;
int i,j,n=0;
p=(char*)malloc(4*5000);
scanf("%s",&*p);
for(i=0;p[i]!='\0';i++)
{
for(j=i+1;p[j]!='\0';j++)
{
if(p[i]>p[j])
{
n++;
}
if(p[i]==p[j])
{
if(dg(p+i,j-i))
{
n++;
}
}
}
}
printf("%d",n);
return 0;
}
0.0分
2 人评分
C语言训练-列出最简真分数序列* (C语言代码)浏览:658 |
C语言程序设计教程(第三版)课后习题6.3 (C++代码)浏览:1068 |
C语言程序设计教程(第三版)课后习题8.4 (C语言代码)浏览:628 |
求圆的面积 (C语言代码)浏览:1756 |
C语言程序设计教程(第三版)课后习题9.4 (C语言代码)浏览:699 |
C语言程序设计教程(第三版)课后习题9.3 (C语言代码)浏览:750 |
1014题解浏览:524 |
1124题解浏览:630 |
C语言程序设计教程(第三版)课后习题10.3 (C语言代码)浏览:523 |
字符串的输入输出处理 (C语言代码)浏览:1085 |