每日一练(C语言)答案讨论

今天的每日一练中,有一道“小艺改编字符串”的问题。
题目描述:
已知字符串str. 添加至少多少字符可以使得str变成回文串。
输入描述:
输入字符串s.(1<=len(str)<=100)
输出描述:
输出最小需要添加字符的数量。
示例
输入
abab
输出
1
题主报的答案是这样的:

#include 
#include 
#include 

void solution(char *s){
 
    // TODO: 请在此编写代码
    int length = strlen(s);
    int i, j, k;
    int count;
    int notEqual = 0;
    for (i = 0; i < length; i++) {
        notEqual = 0;
        for (j = i, k = length - 1; j < length && j <= k; j++, k--) {
            if (s[j] != s[k]) {
                notEqual = 1;
                break;
            }
        }
        if (notEqual == 0) {
            printf("%d\n", i);
            break;
        }
    }
}

int main() {
    char s[1000];
    scanf("%s", s);

    solution(s);
    return 0;
}

得到的结果是:
运行中
运行成功:
不通过
您的代码已保存。
答案错误,您提交的程序没有通过所有的测试用例。
case通过率:40.0%

我用自己的编译器试了几个实例结果都没错,请各位朋友,指点一二

运行中
是不是死循环或者超时了。

仅供参考!
若结果显示不正确请修改一下输出的格式化字串。

img

img

img

img

#include <stdio.h>
#include <string.h>

void solution(char *s) {
    // TODO: 请在此编写代码
    if(!s)
    {
        puts("不存在!");
        return;
    }
    int len = strlen(s);

    //最大长度
    int n=len*2-1;
    //最大可能添加字符数
    int m=len-1;

    //最长可能回文
    char s0[n+1];
    strncpy(s0,s,n);

    char *p=s+len-2,*p0=s0+len;
    //原字串尾部去重
    while(p>=s)
    {
        if(*p==s[len-1])
            m--;
        else
            break;
        p--;
    }

    //最长可能回文
    p=s+m-1;
    while(p>=s)
    {
        *p0++=*p--;
    }
    *p0='\0';

    char *ps0=s0+len-1;
    for(int i=0; i<=m; i++)
    {
        ps0=s0+len+i-1;
        p0=s0;
        while(ps0>p0)
        {
            if(*ps0!=*p0)
                break;
            ps0--,p0++;
        }
        if(ps0<=p0)
        {
            printf("%d\n",i);
            break;
        }

    }
}

int main(void) {
    char s[1000];
    scanf("%100s", s);
    solution(s);
    return 0;
}


今天的每日一连,也出现了同样的问题,题目:
题目描述
小艺定义一个幸运数字的标准包含3条: 1、仅包含4和7。 2、数字的前半部分等于后半年部分。 3、数字的长度是偶数。

输入描述:
输入整数n。(1<=n<=1e1000)

输出描述:
如果数字n是幸运数字输出“Yes”,否则输出“No”

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void solution(char *n){
 
    // TODO: 请在此编写代码
    int length = strlen(n);
    int i;
    for (i = 0; i < length; i++) {
        if (n[i] != '4' && n[i] != '7') {
            printf("No");
            return;
        }
    }
    int k;
    for (i = 0, k = length - 1; i <= k; i++, k--) {
        if (n[i] != n[k]) {
            printf("No");
            return;
        }
    }
    if (length%2 == 0) {
        printf("Yes");
    }
    else {
        printf("No");
    }
}

int main() {
    char n[1000];
    scanf("%s", n);

    solution(n);
    return 0;
}

得到的结果还是这样:
行中...
运行成功:
不通过
您的代码已保存。
答案错误,您提交的程序没有通过所有的测试用例。
case通过率:40.0%