不会循环


私信TA

用户名:dotcpp0718518

访问量:1128

签 名:

等  级
排  名 36757
经  验 417
参赛次数 0
文章发表 3
年  龄 0
在职情况 学生
学  校 天津师范大学
专  业

  自我简介:

解题思路:因为题目中是连续子序列,所以两个循环确定头尾,如果头大于尾,则肯定交换后小于之前数。如: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 人评分

  评论区

  • «
  • »