噫吁汐 2024-02-08 18:47 采纳率: 95%
浏览 5
已结题

UVa455周期串算法WA错误

题目为:

img

代码如下:

#include<stdio.h>
#include<string.h>
#define max 100
int main(){
    int n=0;
//    freopen("input.txt","r",stdin);
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        char s[max];
        char temp[max];
        memset(temp,0,sizeof(temp));//初始化变量,不然会输出错误 
        int label=0;//用于判断结束循环的标志 
        scanf("%s",s);
        for(int j=1;j<=strlen(s);j++){//暴力遍历求最短串 && j代表最短串的位数 
            temp[j-1]=s[j-1];
            int l=0;
            for(int k=0;k<strlen(s);k++,l=(l+1)%j){
                if(temp[l]!=s[k]){//不同就退出判断循环 
                    break;
                }
                if(k==strlen(s)-1){//找到最短串 
                    label=1;
                }
            }
            if(label==1){
                break;
            }
            
        }
//        for(int i=0;i<strlen(temp);i++){
//            printf("%c",temp[i]);
//        }
        printf("%d\n",strlen(temp));
        if(i<n-1){
            printf("\n");
        }
    }
    
} 

本地调试输出结果正确,但是上传到oj后显示wrong answer

  • 写回答

3条回答 默认 最新

  • 专家-郭老师 Java领域新星创作者 2024-02-08 18:48
    关注

    参考通义千问和郭老师的小迷弟雅思莫了-编写提供,主要是为了帮助您快速解决问题,如下回答,您可以参考下,如有问题,评论区留言。

    该代码的问题在于,当未找到循环节(即字符串中不存在重复的子串)时,输出的是一个未定义的字符串长度。解决这个问题的方法是在循环结束后检查 label 的值,并在没有找到循环节时,输出字符串的实际长度。

    修改后的代码如下:

    #include<stdio.h>
    #include<string.h>
    #define max 100
    
    int main(){
        int n=0;
        //freopen("input.txt","r",stdin);
        scanf("%d",&n);
        for(int i=0;i<n;i++){
            char s[max];
            char temp[max];
            memset(temp,0,sizeof(temp));
    
            int label=0;
            scanf("%s",s);
    
            for(int j=1;j<=strlen(s);j++){//暴力遍历求最短串 && j代表最短串的位数
                temp[j-1]=s[j-1];
                int l=0;
                for(int k=0;k<strlen(s);k++,l=(l+1)%j){
                    if(temp[l]!=s[k]){
                        break;
                    }
                    if(k==strlen(s)-1){//找到最短串
                        label=1;
                    }
                }
                if(label==1){
                    break;
                }
            }
    
            // 当没有找到循环节时,输出原字符串长度
            if (label == 0) {
                printf("%d\n", strlen(s));
            } else {
                printf("%d\n", strlen(temp));
            }
    
            if(i<n-1){
                printf("\n");
            }
        }
    }
    

    这样,如果输入的字符串不是周期串,将会输出其实际长度,从而避免了错误答案。同时,请确保你已经充分测试了各种边界条件和可能的输入情况。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月12日
  • 创建了问题 2月8日

悬赏问题

  • ¥15 SQLServer怎么录入下标
  • ¥100 无网格伽辽金方法研究裂纹扩展的程序
  • ¥15 错误于library(org.Hs.eg.db): 不存在叫‘org.Hs.eg.db’这个名称的程序包,如何解决?
  • ¥60 求一个图片处理程序,要求将图像大小跟现实生活中的大小按比例联系起来的
  • ¥50 求一位精通京东相关开发的专家
  • ¥100 求懂行的大ge给小di解答下!
  • ¥15 pcl运行在qt msvc2019环境运行效率低于visual studio 2019
  • ¥15 MAUI,Zxing扫码,华为手机没反应。可提高悬赏
  • ¥15 python运行报错 ModuleNotFoundError: No module named 'torch'
  • ¥100 华为手机私有App后台保活