2019年4月3日华为实习生笔试第1题-交替输出字符串

在这里插入图片描述
在这里插入图片描述

笔试的时候我只调出来20%,后面找到原因了,也是一些小问题,要气死了
第二题也没有先做出来,还是该先做出来第一题再做第二题的

#include <iostream>
#include <vector>
#include <string>
#include <list>
using namespace std;
/*
3
2,5,6,7,9,5,7
1,7,4,3,4

2,5,6,1,7,4,7,9,5,3,4,7
*/

//变量用完记得清零!!!!!
int main()
{
	int N;
	cin >> N;
	string str;
	vector<string> vecStr;
	while (cin >> str)
	{
		vecStr.push_back(str+',');
	}

	int MaxLen = 0;
	for (int i = 0; i < vecStr.size(); i++)
	{
		if (vecStr[i].size() > MaxLen)
		{
			MaxLen = vecStr[i].size();
		}
	}

	if (MaxLen % (2 * N) == 0)
	{
		MaxLen = MaxLen / (2 * N);
	}
	else
		MaxLen = MaxLen / (2 * N) + 1;

	string outStr;
	vector<int> count(vecStr.size(),0);
	vector<int> flag(vecStr.size(), 0);
	for (int j = 0; j < MaxLen; j++)
	{
		for (int i = 0; i < vecStr.size(); i++)
		{
			string newStr = vecStr[i];
			if (newStr.substr(count[i] * (2 * N)).size() >= N * 2)
			{
				outStr = outStr + newStr.substr(count[i] * (2 * N), N * 2);
				count[i]++;
			}
			else if(flag[i] == 0)
			{
				outStr = outStr + newStr.substr(count[i] * (2 * N));
				flag[i] ++;
			}
		}
	}

	cout << outStr.substr(0,outStr.size()-1) << endl;

	return 0;
}

按Ctrl+Z,结束输入
在这里插入图片描述

意思代码经博友的提醒发现有问题,只能对个位数的数字有效。
在牛客网上找了一下结题思路,如下:
查找逗号的出现的次数
//附上别人的代码,我加了些注释

#include <iostream>
#include <vector>
#include <stdio.h>
#include <string>
using namespace std;

int main()
{
	int len;
	cin >> len;
	vector<string> allstr;
	string strtemp;
	int i, j, temp;
	while (cin >> strtemp)
	{ 
		allstr.push_back(strtemp);
	}
	long long sumlen = 0;
	for (i = 0; i < allstr.size(); i++)
	{ 
		sumlen += allstr[i].length();
	}
	string result;
	int num = 0;
	int l = 0;
	while (sumlen)
	{ 
		for (i = 0; i < allstr.size(); i++)
		{ 
			if (allstr[i].length() != 0)
			{ 
				l = 0;//统计需要截取的字符长度
				num = 0;//统计,号次数
				for (j = 0; j < allstr[i].length(); j++)
				{ 
					l++;
					if (allstr[i][j] == ',')
						num++;//统计,号次数
					if (num == len)
						break; 
				} 

				if (num == len)//说明字符长度足够截取
				{
					result += allstr[i].substr(0, l);
					allstr[i] = allstr[i].erase(0, l);
				} 
				else//如果截取到尾部添加,
				{ 
					result += allstr[i];
					result += ',';
					allstr[i].erase(0);
				}
			}
		}
		sumlen = 0;
		//重新获取所有字符串的长度
		for (i = 0; i < allstr.size(); i++)
		{ 
			sumlen += allstr[i].length();
		}
	}
	result.erase(result.length() - 1);
	cout << result << endl;     
	return 0;
}

猜你喜欢

转载自blog.csdn.net/zy47675676/article/details/89005604