阿白| 2021-12-06 22:17 采纳率: 91.7%
浏览 76
已结题

输出超限:zzulioj:1163亲和串

题目是这样的:
1163: 亲和串(字符串)
时间限制: 1 Sec 内存限制: 128 MB
提交: 6635 解决: 2951
[状态] [讨论版] [提交] [命题人:admin]
题目描述
判断亲和串。亲和串的定义是这样的:给定两个字符串s1和s2,如果能通过s1循环移位,使s2包含在s1中,那么我们就说s2 是s1的亲和串。

输入
本题有多组测试数据,每组数据的第一行包含输入字符串s1,第二行包含输入字符串s2,s1与s2的长度均小于100000。

输出
如果s2是s1的亲和串,则输出"yes",反之,输出"no"。每组测试的输出占一行。

样例输入 Copy
AABCD
CDAA
ASD
ASDF
ab
aba
样例输出 Copy
yes
no
no
来源/分类

我的代码(样例输出没问题,提示输出超限,代码我加注了,希望指点,看看我的逻辑哪里错了(还是连思路都错了))
如果有更好的思路,求!!!

#include <stdio.h>
#include <stdlib.h>
#include<math.h>
#include<ctype.h>
#include<string.h>
#include<limits.h>//这些头文件是之前懒省事全加上了
void exchange(char *p,int lo);
int main()
{
    char a[100001],b[100001];
    int i;
    while(1)
    {
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));//清空数组
        gets(a);
        gets(b);
        int loa=strlen(a);
        int lob=strlen(b);//求两数组长度
        char lowtime[lob];/*设置一个数组来从前往后截取a数组长度lob的部分
                            (想用strcmp比较两数组是否相等)*/
        int f;
        for(f=0;f<loa;f++)
        {
            strncpy(lowtime,a,lob);//截取数组
            if(strcmp(b,lowtime)==0)//如果数组a前lob个位置与数组b相等
            {
                printf("yes");
                break;
            }
            exchange(a,loa);//如果不相等的话,定义一个函数移位
        }
        if(f==loa) printf("no");//如果经历了完整的循环仍然不能相等,输出no
        printf("\n");
    }
    return 0;
}
void exchange(char *p,int lo)
{
    int t=*(p+lo-1);//把数组最后一个位置的值赋给t
    for(int i=lo-2;i>=0;i--)//数组往后移一位
        *(p+i+1)=*(p+i);
    p[0]=t;//再把原末尾值赋给首位置
}


  • 写回答

1条回答 默认 最新

  • -Undefined_ 2021-12-06 22:54
    关注

    程序死循环啦 EOF

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

    报告相同问题?

    问题事件

    • 系统已结题 12月14日
    • 已采纳回答 12月6日
    • 创建了问题 12月6日

    悬赏问题

    • ¥15 c++图Djikstra算法求最短路径
    • ¥15 Linux操作系统中的,管道通信问题
    • ¥15 ansible tower 卡住
    • ¥15 等间距平面螺旋天线方程式
    • ¥15 通过链接访问,显示514或不是私密连接
    • ¥100 系统自动弹窗,键盘一接上就会
    • ¥50 股票交易系统设计(sql语言)
    • ¥15 调制识别中这几个数据集的文献分别是什么?
    • ¥15 使用c语言对日志文件处理
    • ¥15 请大家看看报错原因,为啥会这样