您的位置:首页 > 其它

2017校招笔试题

2016-09-09 21:55 197 查看
题目:输入一个字符串从左到右遍历,如果遇到三个连续相同的子串就将这个子串删除,并将原串剩下的部分拼接到一起,重复上述过程,直到字符串中没有可以删除的子串。

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息