某为线上笔试某题心得

之前投了某为的软件开发岗,顺利通过简历筛选后参加了今晚的线上笔试。总的来说,某为的题并不难,总共三道编程题,粗暴但不简单。笔试期间脑子略有点发昏,导致第二道编程题栽在了一个小问题上,在交卷后左思右想在Linux上又重新写出程序编译,才发现问题所在。大概最大的感受就是遗憾吧。

某为的第一道笔试题是输入长度未知的字符串,然后去重,不改变排列顺序输出字符串(字符串中不包含空格)。这一题比较简单,考虑到c语言用char*指针作为字符串时,在读取字符串时需要一个特殊字符'\0'来标记指针的结束位置,也就是通常认为的字符串结束标记。而c++语言则是面向对象的,长度信息直接被存储在了对象的成员中,读取字符串可以直接根据这个长度来读取,所以就没必要需要结束标记了。可以将string对象中重复的字符用'\0'代替,编写程序:

#include <iostream>
#include <string>

using namespace std;
int main()
{
	int len;
	string str;
	cout << "输入字符串:";
	cin >> str;
	len = str.size();
	for(int i=0;i<len-1;i++){
		if(str[i]!='\0'){
			for(int j=i+1;j<len;j++){
				if(str[i]==str[j]){
					str[j]='\0';
				}
			}
		}
		else{
			continue;
		}
		
	}
	cout << "去重后:" << str <<endl;
	return 0;
}

编译和调试结果:

某为的第二道笔试题的大意是12点到20点(分为8个整点时间区间)之间会有客人到来以及离去(到来和离去都看做整点,客人需在12点之后到来,20点之前离开),统计所有客人停留的时间长度(输入不多于100个客人的到达整点时间和离开整点时间,以“-1 -1”结束输入),最终输出每个时间区间客人的最大数目。题目意思有点绕,但是读明白就能理解,重点是以每个客人停留的时间作为循环的起点和重点,对于这段时间内的区间各加上一个“1”。

那么,可以编写程序:

#include<iostream>
#include<cstdio>
#include<cstring>

using namespace std;
int main(){
	int a[100][2]; //定义最大输入容量
	int group[8]; //定义8个整数区间
	int count = 0; //定义实际输入“客人”个数的统计参数
	int flag = 1; //定义了两次跳出循环的信号参数
	for(int i=0; i<100; i++){ //将输入信息循环存储到数组中
		for(int j=0; j<2; j++){
			scanf("%d",&a[i][j]);
			if(a[i][j] == -1){
				flag = 0;
				break;
			}

		}
		if(flag == 0){break;}
		else{count++;}
	}
	for(int i=0; i<8; i++){ //对group数组元素进行初始化
		group[i]=0;
	}
	for(int i=0; i<count; i++){
		for(int j=a[i][0]-12; j<a[i][1]-11; j++){ //循环遍历时间段内所有区间,对应的group加1
			group[j]++;
		}
	}
	cout << "[12,13):" << group[0] << endl;
	cout << "[13,14):" << group[1] << endl;
	cout << "[14,15):" << group[2] << endl;
	cout << "[15,16):" << group[3] << endl;
	cout << "[16,17):" << group[4] << endl;
	cout << "[17,18):" << group[5] << endl;
	cout << "[18,19):" << group[6] << endl;
	cout << "[19,20):" << group[7] << endl;
	return 0;
}

调试结果:

其中,第一次调试结果中出现数字乱码是因为数组没有进行初始化赋值。

在笔试的过程中,对于for(int j=a[i][0]-12; j<a[i][1]-11; j++)语句,我不慎将二维数组的下标起点记错了,即for(int j=a[i][1]-12; j<a[i][2]-11; j++),导致程序始终无法通过编译。提示存在段错误(堆栈或者数组存在溢出)。

猜你喜欢

转载自blog.csdn.net/qq_34041083/article/details/81712422