ms笔试存档

来源:互联网 发布:大数据有趣的例子 编辑:程序博客网 时间:2024/05/14 14:15

第一题:

#include <iostream>#include <string>#include <set>#include <vector>using namespace std;int fib[10] = {1, 2, 3, 5, 8, 13, 21, 34, 55, 89};bool isFib(string s){int a[26] = {0}, ans = 0;for(int i = 0; i < s.size(); ++i)a[s[i] - 'a'] = 1;for(int i = 0; i < 26; ++i)ans += a[i];for(int i = 0; i < 10; ++i)if(ans == fib[i])return true;return false;}int main(){string s, ss;set<string> sset;cin >> s;int len = s.size();for(int i = 0; i < len; ++i){for(int j = 1; j <= len - i; ++j){ss = s.substr(i, j);sset.insert(ss);}}int setsize = sset.size();for(set<string>::iterator ster = sset.begin(); ster != sset.end(); ++ster){if(isFib(*ster))cout << *ster << endl;}return 0;}



第二题:

#include <iostream>#include <string>using namespace std;int a[501];int digits[4][3] = {1, 2, 3,4, 5, 6,7, 8 , 9,-1, 0, -1};int hang(int x){if( x<= 3 && x >= 1)return 0;else if(x <= 6 && x >= 4)return 1;else if(x <= 9 && x >= 7)return 2;else if(x == 0)return 3;}int lie(int y){if(y % 3 ==1)return 0;else if(y %3 ==2 || y == 0)return 1;else if(y %3 == 0 && y != 0)return 2;}bool isTrue(int a[], int index){int k = 0;for(int i = 0; i < index; ++i){++k;}if(k == 1)return true;int m1 = hang(a[0]);int n1 = lie(a[0]);for(int i = 1; i < index; ++i){int m2 = hang(a[i]);int n2 = lie(a[i]);if(m2 >= m1 && n2 >= n1){m1 = m2;n1 = n2;continue;}elsereturn false;}return true;}int main(){int t;string s;cin >> t;while(t--){cin >> s;int i;for(i = 0; i < s.size(); ++i)a[i] = s[i] - '0';a[i] = '\0';int index = s.size();bool flag = false;for(int j = a[index - 1]; j >=0; --j){a[index - 1] = j;if(isTrue(a, index)){for(int k = 0; k < index; ++k){cout << a[k];}flag = true;break;}}if(!flag){if(a[index - 2] != 0){a[index - 1] = 9;--a[index - 2];for(int k = 0; k < index; ++k){cout << a[k];}}else{int kk;for(int p = index - 2; p >= 0; --i){if(a[p] != 0)kk = p;}a[kk]--;for(int q = kk + 1; q <= index - 1; ++q)a[q] = 9;for(int p = 0; p < index; ++p)cout << a[p];}}}return 0;}



0 0