2017校招笔试题
2016-09-09 21:55
197 查看
题目:输入一个字符串从左到右遍历,如果遇到三个连续相同的子串就将这个子串删除,并将原串剩下的部分拼接到一起,重复上述过程,直到字符串中没有可以删除的子串。
eg:
输入:AAABCCDDDCB
AABBBABBBA
输出:BB
A
重要:从一个字符串中删除一个子串,必须将原字符串的内容strcpy到开辟的数字中(new char[SIZE]),才能改变原字符串。相当于在数组中删除一部分。
网易
滴滴
题目:求一个数的阶乘末尾有几个0
eg:10! = 3628800 输出:2
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; }
相关文章推荐
- 2017华为暑期实习生校招笔试
- 网易2017校招C++开发工程师(北京)笔试
- 欢聚时代2017校招笔试题目(JAVA基础类)A卷--6
- 凑硬币(2017腾讯校招笔试题)
- 补《欢聚时代2017校招笔试题目(PHP工程师类)---错题解析》
- 58集团2017校招笔试-前端岗
- 2017校招笔试面试总结
- 百度2017校招java研发在线笔试
- 2017校招数据分析岗笔试、面试知识点大总结
- 魔法城市路径问题(腾讯2017校招笔试题)
- 盛大游戏2017校招前端工程师笔试试卷
- 今日头条2017校招笔试题
- 2017校招笔试面试总结(挂满辛酸泪)
- 欢聚时代2017校招笔试题目(JAVA基础类)A卷--7
- 乐港2017校招笔试题
- 2017校招去哪网,阿里,网易,中兴,华为笔试编程题五则(Python描述)
- 2017吉比特校招一个编程笔试题
- 爱奇艺2017校招-Java开发-在线算法笔试题-NIM博弈问题,牛牛羊羊吃草
- 好未来2017校招笔试
- 2017阿里巴巴校招在线笔试——货架格子编号