| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 515 人关注过本帖
标题:C语言 运行错误
取消只看楼主 加入收藏
傻瓜菜
Rank: 2
来 自:earth
等 级:论坛游民
帖 子:73
专家分:66
注 册:2011-10-4
结帖率:94.44%
收藏
已结贴  问题点数:20 回复次数:2 
C语言 运行错误
程序代码:
#include<stdio.h>
#include<string.h>
int main()
{
    int m,n,t,i,k,l,ok,j;
    char s[1001],head[20000],tail[20000];
    scanf("%d",&m);
    while(m--)
    {
        scanf("%d",&n);
        i=0;
        for(j=0;j<n;j++)
        {
            scanf("%s",s);
            t=strlen(s);
            head[i]=s[0];
            tail[i]=s[t-1];
            i++;
        }
        ok=0;
        for(k=0;k<n;k++)
        {
            for(l=0;l<n;l++)
            {
                if(head[k]==tail[l])
                {
                    ok++;
                    tail[l]='0';
                    break;
                }
            }
            if(ok==i-1)
                break;
        }
        if(ok==i-1)
        {
            printf("YES\n");
        }
        else
            printf("NO\n");
    }
    return 0;
}


题目是:
先输入一个数m,表示有m组测试数据;接着输入一个n,表示有n根木棒,接着输入n行字符,(英文小写字母表示木棒,不超过1000个字符),木棒能够连接的条件是:两根木棒的首尾字母相同,比如acm+moj,就可以了(注:kjh+ask也是可以的)。要求测试的n<=100000;
我觉得我的程序没什么问题,可是总是运行错误,求解答?
我知道数组宽度开的不够,可是开了100000,就会出现输出超限的问题,拜托,大家帮帮忙
搜索更多相关主题的帖子: C语言 
2011-12-08 21:18
傻瓜菜
Rank: 2
来 自:earth
等 级:论坛游民
帖 子:73
专家分:66
注 册:2011-10-4
收藏
得分:0 
回复 2楼 hczsea
程序代码:
#include<stdio.h> 
#include<string.h> 
int main() 
{ 
    int m,n,t,i,k,l,ok,j,ok_2; 
    char s[1001],head[100000],tail[80000],same[80000]; 
    scanf("%d",&m); 
    while(m--) 
    { 
        scanf("%d",&n); 
        i=0; 
        k=0;
        for(j=0;j<n;j++) 
        { 
            scanf("%s",s); 
            t=strlen(s);
            if(s[0]==s[t-1])
            {
                same[k]=s[0];
                k++;
            }
            else
            {
                head[i]=s[0]; 
                tail[i]=s[t-1]; 
                i++;
            }
        } 
        l=0;
        ok=0;
        for(j=0;j<k;j++)
        {
            if(same[j]==head[l])
            {
                head[l]='0';
                l++;
                ok++;
                continue;
            }
            else if(same[j]==tail[l])
            {
                tail[l]='0';
                l++;
                ok++;
                continue;
            }
            else
            {
                ok_2=0;
                break;
            }
        }
        for(k=0;k<i;k++)
        {
            if(head[k]=='0') continue;
            for(j=0;j<i;j++)
            {
                if(tail[j]=='0') continue;
                if(j==k) continue;
                else
                {
                    if(head[k]==tail[j])
                    {
                        ok++;
                        tail[l]='0';
                        break;
                    }
                }
            }
        }
        if(ok_2==0)
        {
            printf("NO\n");
        }
        else
        {
            if(ok>=i-1) 
            { 
                printf("YES\n"); 
            } 
            else
                printf("NO\n");
        }
    } 
    return 0; 
} 
这是我改过以后的程序,前面那个确实有些情况漏考虑了,不是定义变量类型的问题,而是怎么减少中间比较的过程,我最后提交是“时间超限”,是循环过多导致的吧?麻烦各位高手再看看
2011-12-09 18:02
傻瓜菜
Rank: 2
来 自:earth
等 级:论坛游民
帖 子:73
专家分:66
注 册:2011-10-4
收藏
得分:0 
程序代码:
#include <string.h>
#include <stdio.h>
int main() 
{
    int t,leters[26],s[26],flags[26],i,j,n,m1,p1,err,x;
    char word[1024],c;
    scanf("%d",&t);
    while(t--)
    {
        for(i=0;i<26;i++) 
        {
            leters[i]=flags[i]=0;
            s[i]=i;
        }
        scanf("%d", &n);
        for(i=0;i<n;i++) 
        {
            scanf("%s",word);
            leters[word[0]-'a']++;
            leters[(c=(strrchr(word,0)[-1]))-'a']--;
            for(j=0;j<26;j++) 
            {
                if(s[j]==s[c-'a'])
                {
                    s[j]=s[word[0]-'a'];
                }
            }
            flags[word[0]-'a']=1;
            flags[c-'a']=1;
        }
        m1=p1=err=0;
        x=-1;
        for(i=0;i<26;i++)
        {
            if(flags[i]) 
                if(leters[i]==0)
                    if(x!=s[i])
                        if(x==-1)
                            x=s[i];
                        else
                            err=1;
            else if(leters[i]==-1) 
                if (m1)
                    err=1;
                else
                    m1=1;
            else if(leters[i]==1) 
                if (p1)
                    err=1;
                else
                    p1=1;
            else
                err=1;
        }
        puts(err?"NO":"YES");
    }
    return 0;
}

这是我们学长给的程序,但是我看不懂,什么注释都没有,拜托,有没有高手可以解释一下,尤其是strchrr那个函数。谢谢
2011-12-10 19:48
快速回复:C语言 运行错误
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024047 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved