2017校招筆試題
阿新 • • 發佈:2019-01-31
題目:輸入一個字串從左到右遍歷,如果遇到三個連續相同的子串就將這個子串刪除,並將原串剩下的部分拼接到一起,重複上述過程,直到字串中沒有可以刪除的子串。
eg:
輸入:AAABCCDDDCB
AABBBABBBA
輸出:BB
A
重要:從一個字串中刪除一個子串,必須將原字串的內容strcpy到開闢的數字中(new char[SIZE]),才能改變原字串。相當於在陣列中刪除一部分。
#include<iostream>
using namespace std;
#pragma warning (disable:4996)
char * RmoveSubstr(char *str)
{
if (str == NULL)
return NULL;
char *begin = str; //遍歷字串指標
char *sub = str; //指向有三個相同字元(子串)開始的地方
char ch;
int count = 0;
while (1)
{
ch = *begin;
count = 0;
while (ch == *begin)
{
count++, begin++;
}
//開始刪除
if (count == 3)
{
sub = begin - 3;
while (*sub++ = *begin++) //逐個覆蓋
{}
begin = str; //從頭開始遍歷
}
//退出條件,沒有可刪除的子串了
else if (count < 3 && *begin == '\0')
return str;
}
}
int main()
{
/*char *str = "AAABCCDDDCB";*/
char *str = "AABBBABBBA";
int len = strlen(str);
/////////////////重要///////////////
char *arr = new char[len + 1];
strcpy(arr, str);
//////////////////////////////////
char *ret = RmoveSubstr(arr);
cout << ret << endl;
delete[] arr;
return 0;
}
網易
/*思路:為了買儘量少的袋數,所以先要算出最多能買多少袋8個裝的
然後用剩餘的個數/6,看是否能被6整除,如果不能則少拿一袋8個裝的
剩餘的個數+8,再用剩餘的個數/6,以此類推,知道8個裝的個數減到0,
還不能被6整除,則說明沒有合適的購買方法,此時剩餘的個數=總個數*/
int main()
{
int N;
cin >> N;
int num8 = N / 8; //買8個裝的個數
int surplus = N % 8; //剩餘的個數
int num6 = 0; //買6個裝的個數
while (num8 >= 0 && surplus != 0)
{
num6 = surplus / 6;
if (surplus % 6 == 0) //剩餘的個數能被6整除,則剛剛好,可以退出程式
break;
else
{
num8--;
//注意邊界控制,當num8 = -1時,不能再+8
if (num8 >= 0)
surplus += 8;
}
}
//剩餘的個數 = 總個數,說明沒找到合適的買法
if (surplus == N)
cout << -1 << endl;
else
{
cout << "buy 8 : " << num8 << endl;
cout << "buy 6 : " << num6 << endl;
cout <<"total : "<< num8 + num6 << endl;
}
return 0;
}
滴滴
題目:求一個數的階乘末尾有幾個0
eg:10! = 3628800 輸出:2
#include<iostream>
#include<stack>
using namespace std;
//將數字裝換成字串 eg:1234->"1234"
void print(long long val)
{
int count = 0;
stack<long long> s;
//向棧中依次插入1234,123,12,1
while (val != 0)
{
s.push(val);
val /= 10;
}
char ch[1024] = { '\0' };
//將轉換的字元存入字元陣列中
int len = s.size();
for (int i = 0; i < len; i++)
{
long long top = s.top();
s.pop();
ch[i] = (top % 10) + '0';
}
//從陣列的末尾計算0的個數
for (int i = len - 1; i >= 0; i--)
{
if (ch[i] == '0')
count++;
else
break;
}
cout << count << endl;
}
int main()
{
long long n, i, j = 1;
cout << "請輸入正整數n:" << endl;
cin >> n;
for (i = 1; i <= n; i++)
j *= i;
cout << "正整數" << n << "的階乘為:" << j << endl;
print(j);
return 0;
}