V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
shrimp929
V2EX  ›  问与答

在牛客网上做编程题遇到个怪事,想不通,请教下大家

  •  
  •   shrimp929 · 2017-04-26 18:23:06 +08:00 · 2195 次点击
    这是一个创建于 2803 天前的主题,其中的信息可能已经有所发展或是发生改变。

    网易 2017 春招编程题中有个涂棋盘的题,题目如下: 小易有一块 n*n 的棋盘,棋盘的每一个格子都为黑色或者白色,小易现在要用他喜欢的红色去涂画棋盘。小易会找出棋盘中某一列中拥有相同颜色的最大的区域去涂画,帮助小易算算他会涂画多少个棋格。

    输入描述: 输入数据包括 n+1 行: 第一行为一个整数 n(1 ≤ n ≤ 50),即棋盘的大小 接下来的 n 行每行一个字符串表示第 i 行棋盘的颜色,'W'表示白色,'B'表示黑色

    输出描述: 输出小易会涂画的区域大小

    输入例子: 3 BWW BBB BWB

    输出例子: 3

    在我的解答中,我用二维数组来接收输入没有任何问题,但是用 string 类型,定义 string s[50],提交会提示段错误,但是我定义 string s[51]就能正常运行,输入 n<=50 的啊,所以我想不明白是为什么,下面附上我的源码

    #include <iostream>

    #include <cstring>

    using namespace std;

    int main()

    {

    int n;
    
    //char s[50][50];
    
    string s[51];
    
    int max=0;
    
    cin >> n;
    
    for(int i=0;i<n;i++)
    
    {
    
    	cin >> s[i];
        
    /*	for(int j=0;j<n;j++)
    
    	{
        
    		cin >> s[i][j];
            
    	}*/
        
    }
    
    
    for(int i=0;i<n;i++)
    {
    	int c = 0;
    	int j=0;
    	while(j<(n-1))
    	{
    		c=1;
    		while(s[j][i]==s[j+1][i])
    		{
    			c++;
    			j++;
    		}
    		if(max < c)
    		{
    			max = c;
    		}
    		j++;
    	}
    }
    
    cout << max;
    return 0;
    

    }

    2 条回复    2017-04-30 16:44:53 +08:00
    codingyue
        1
    codingyue  
       2017-04-26 18:41:21 +08:00 via iPhone
    while(s[j][i]==s[j+1][i])
    {
    c++;
    j++;
    }

    这里越界了
    shrimp929
        2
    shrimp929  
    OP
       2017-04-30 16:44:53 +08:00
    @codingyue 好像没有越界把,j 的范围应该是1-( n-1 ),我 while 循环的时候 j<(n-1)的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   960 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 21:02 · PVG 05:02 · LAX 13:02 · JFK 16:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.