某爲線上筆試心得

之前投了某爲的軟件開發崗,順利通過簡歷篩選後參加了今晚的線上筆試。總的來說,某爲的題並不難,總共三道編程題,粗暴但不簡單。筆試期間腦子略有點發昏,導致第二道編程題栽在了一個小問題上,在交卷後左思右想在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++),導致程序始終無法通過編譯。提示存在段錯誤(堆棧或者數組存在溢出)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章