标题:小白求助,这代码一直超时,要疯了
只看楼主
JACKIE_m
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2019-3-26
结帖率:100%
已结贴  问题点数:20 回复次数:6 
小白求助,这代码一直超时,要疯了
题目要求能实现多组输入
每组 第一行包含两个整数值:M和N(1 <= M,N<=200)。接着输入一个M行N列的矩阵,矩阵元素只能是1或0。输出所使用砖块的高度和数量,使用如下格式分行显示: k Ck 其中k∈{ 1,2,….,M}代表砖块的高度,Ck代表需要的高度为K的砖块的数量,不用输出Ck=0的行,按照K的升序显示各行。
如输入:
5 10
1110000111
1100001111
1000000011
1111101111
1110000111
输出:
1 7
2 1
3 2
5 1
说白了就是求每列连续0的数量,再输出每种不同0个数的组数(注意只能在列中取连续0)
搜索更多相关主题的帖子: 代码 超时 输出 高度 数量 
2019-03-26 14:05
JACKIE_m
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2019-3-26
得分:0 
#include <stdio.h>
#include <stdlib.h>

int process(int m,int n)
{
    char num[200][200];
    int i,j,count[200],ans[200];
    for(i=1;i<=m;i++)
    {
        for(j=1;j<=n;j++)
            {
                scanf("%c",&num[i][j]);
                if(num[i][j]=='0')
                {
                    count[j]++;
                    if(i==m)
                    {
                        ans[count[j]]++;
                        count[j]=0;
                    }
                }
                if(num[i][j]=='1')
                {   if(num[i-1][j]=='0')
                    {
                     ans[count[j]]++;
                     count[j]=0;
                    }
                }
            }
             getchar();
    }
     for(i=1;i<=200;i++)
         if(ans[i]>0)
            {
                printf("%d %d\n",i,ans[i]);
                ans[i]=0;
            }
}

int main()
{

    int m,n;
    while (1)
    {  scanf("%d%d",&m,&n);
       process(m,n);
    }
    return 0;
}
这是我的代码,能有效的输入输出,就是提交好几次都是超时,把process放进main里也是一样。(为了能实现多组输入我在main里面用了一个大while)
2019-03-26 14:08
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
1. 题目不肯贴

2. count 和 ans 还没赋值就读取了?

3. while (1) 这是死循环吧?
2019-03-26 16:10
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
getchar(); 放置的位置也是错的,也就是你连矩阵都没能读正确

我随手写一个,正误不知,仅供参考
程序代码:
#include <stdio.h>

void foo( unsigned m, unsigned n )
{
    unsigned char buf[200] = { 0 };
    unsigned map[201] = { 0 };

    for( unsigned r=0; r!=m; ++r )
    {
        getchar();
        for( unsigned c=0; c!=n; ++c )
        {
            char v;
            scanf( "%c", &v );

            if( v == '1' )
            {
                ++map[ r-buf[c] ];
                buf[c] = r+1;
            }
            if( r+1 == m )
            {
                ++map[ m-buf[c] ];
            }
        }
       

    }

    for( unsigned i=1; i!=n; ++i )
        if( map[i] != 0 )
            printf( "%u %u\n", i, map[i] );
}

int main( void )
{
    for( unsigned m,n; scanf("%u%u",&m,&n)==2; )
        foo( m, n );
}

2019-03-26 16:16
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:20 
我改一下,还是不用 getchar() 这种猥琐代码了,算法没变

程序代码:
#include <stdio.h>

void foo( unsigned m, unsigned n, char matrix[][201] )
{
    unsigned buf[200] = { 0 };
    unsigned map[201] = { 0 };

    for( unsigned r=0; r!=m; ++r )
    {
        for( unsigned c=0; c!=n; ++c )
        {
            if( matrix[r][c] == '1' )
            {
                ++map[ r-buf[c] ];
                buf[c] = r+1;
            }
            if( r+1 == m )
            {
                ++map[ m-buf[c] ];
            }
        }
    }

    for( unsigned i=1; i!=n; ++i )
        if( map[i] != 0 )
            printf( "%u %u\n", i, map[i] );
}

int main( void )
{
    unsigned m, n;
    char matrix[200][201];
    for( ; scanf("%u%u",&m,&n)==2; )
    {
        for( size_t r=0; r!=m; ++r )
            scanf( "%s", matrix[r] );

        foo( m, n, matrix );
    }
}



2019-03-26 16:22
JACKIE_m
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2019-3-26
得分:0 
回复 5楼 rjsp
谢谢大大,我还是个菜鸟,这代码昨天改是改出来了,但看到您的回复我收获良多。getchar这个函数是不好吗?
2019-03-27 09:09
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:0 
怎么都看不懂题意

能编个毛线衣吗?
2019-03-27 10:17



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-493807-1-1.html




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

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