今日头条笔试第三题是不是有问题啊
发布于 2017-03-30 21:10 3314 次浏览 0 赞 来自 笔试面试  
//测了很多样例都没问题,但是只通过30%


#include <iostream>
#include <string>
#include <vector>
using namespace std;


int main()
{
	string str;
	cin >> str;
	if (str.size() == 0)
		return 0;
	vector<int> level(str.size(), 0);
	int l = 0;
	int maxL = 0;
	for (int i = 0; i < str.size(); ++i)
	{
		if (str[i] == '[')
		{
			++l;
			level[i] = l;
			if (l > maxL)
				maxL = l;
		}
		if (str[i] == ']')
		{
			level[i] = l;
			--l;
		}
	}
	for (int i = 0; i < str.size(); ++i)
		level[i] = maxL - level[i];

	--maxL;
	for (int i = 0; i < str.size(); ++i)
	{
		if (str[i] == '[')
		{
			if (level[i] == maxL)
			{
				cout << '+';
				for (int k = 0; k < 2 * maxL + 1; ++k)
					cout << '-';
				cout << '+';
				cout << endl;
			}
			else
			{
				for (int j = 0; j < (2 * maxL - 2 * level[i] - 2)/2; ++j)
					cout << ' ';
				cout << "|+";
				for (int j = 0; j < (2 * level[i] + 1); ++j)
					cout << '-';
				cout << "+|";
				for (int j = 0; j < (2 * maxL - 2 * level[i] - 2) / 2; ++j)
					cout << ' ';
				cout << endl;
			}


			if (level[i] == level[i + 1])
			{
				for (int j = 0; j < (2 * maxL - 2 * level[i]) / 2; ++j)
					cout << " ";
				cout << "|";
				for (int j = 0; j < 2 * level[i] + 1; ++j)
					cout << " ";
				cout << "|";
				for (int j = 0; j < (2 * maxL - 2 * level[i]) / 2; ++j)
					cout << " ";
				cout << endl;

				for (int j = 0; j < 2 * maxL + 3; ++j)
					cout << " ";
				cout << endl;
			}
			
		}
		else if (str[i] == ']')
		{
			if (level[i] == level[i - 1])
			{
				for (int j = 0; j < (2 * maxL - 2 * level[i]) / 2; ++j)
					cout << " ";
				cout << "|";
				for (int j = 0; j < 2 * level[i] + 1; ++j)
					cout << " ";
				cout << "|";
				for (int j = 0; j < (2 * maxL - 2 * level[i]) / 2; ++j)
					cout << " ";
				cout << endl;
			}

			if (level[i] == maxL)
			{
				cout << '+';
				for (int k = 0; k < 2 * maxL + 1; ++k)
					cout << '-';
				cout << '+';
				cout << endl;
			}
			else
			{
				for (int j = 0; j < (2 * maxL - 2 * level[i] - 2) / 2; ++j)
					cout << ' ';
				cout << "|+";
				for (int j = 0; j < (2 * level[i] + 1); ++j)
					cout << '-';
				cout << "+|";
				cout << endl;
			}
		}
	}

	return 0;
}


9 条回复

我猜是的,貌似是所有层都顶头输出,前面不需要空格

2017-03-30 21:27

我代码思路跟你差不多也是过不了的

2017-03-30 21:37

我猜可能是有些行的末尾输出了多余的空格

2017-03-30 21:46

过了30%

2017-03-30 22:00
acmcoderHBxFcixD 回复 小网

我的程序行末没空格也挂了

2017-03-30 22:04

#include <iostream>

#include <string.h>

#include <math.h>

using namespace std;

#define LEN 100


int nums[6];

void draw() {

    for (int i=0; i<6; i++) {

        if (nums[i] == 0)

            continue;

        int num = nums[i];

        for (int j=0; j<=2*(num+1); j++) {

            int t = min(j, 2*num + 2 -j);

            t = max(0, t-1);

            string str = string(t, ' ');

            t = min(j, 2*num + 2 -j);

            if (t == 0) {

                str += "+" + string(2*num-1, '-') + "+";

            } else if (t < num){

                str += "|+" + string(2*num-1-2*t, '-') + "+|";

            } else if (t == num){

                str += "| |";

            }

            cout << str << endl;

        }

    }

}


int main(void) {

    char str[LEN];

    cin.getline(str, LEN);

    int cnt = 0;    

    memset(nums, 0, sizeof(nums));

    int j = 5;

    for (int i=strlen(str) - 1; i>=0; i--) {

        if (str[i] == ']') {

            cnt ++;

        } else {

            nums[j] = cnt;

            j--;

            cnt = 0;

        }

    }

    draw();

    return 0;

}


提交的时候有个问题, 差两分钟没改完,只过了30%

2017-03-30 22:49

原来错在这儿了,好气哦

2017-03-31 09:43
1
acmcoderJVZyE6k7 回复 lcxywfe

我貌似也是这的问题,想死了

2017-04-01 11:00
lcxywfe 回复 acmcoderJVZyE6k7

我也想死,做了一个小时十分钟这题

2017-04-05 15:04
添加回复
回到顶部