9.18 网易互联网编程4道题(CPP版本)
今天有点累了,做了一个小时就溜了,最近心力憔悴,还好有点收获了。
1.找多少位能整除自己(100%)
#include <bits/stdc++.h> using namespace std; int main () { long long n; cin >> n; int ret = 0; long long temp = n; while (temp) { int cur = temp % 10; temp /= 10; if (cur > 0 && n % cur == 0) ret++; } cout << ret << endl; return 0; }
2.特制键盘打字多少操作完成(63.64%)
#include <bits/stdc++.h> using namespace std; int main () { string S; cin >> S; int m; cin >> m; int X = S.size(); //首先每个键都要被按 //间隔大于1才考虑魔法,最后m步不考虑魔法 vector<int> move;//存放移动距离数据 for (int i = 0; i < S.size() - 1; i++) { move.push_back(min((S[i + 1] + 26 - S[i]) % 26, (S[i] + 26 - S[i + 1]) % 26));//相邻最短移动距离 } for (int i = 0; i < move.size(); i++) { if (m > 0 && i + m < move.size()) { if (move[i] > 1) { X += m; i = i + m - 1; } } else { //没有机会跳动了 X += move[i]; } } cout << X << endl; return 0; }
3.用最少的2的幂构成一个数(100%)
#include <bits/stdc++.h> using namespace std; int main () { int one = 0; int zero = 0; long long n; cin >> n; if (n == 0) { cout << "-1" << endl; return 0; } string s; while (n) { if (n % 2) { s = '1' + s; } else { s = '0' + s; } n /= 2; } //直接看1的数量 for (const auto& c : s) if (c == '1') one++; //先减1,再看0的数量,最多缩一位,就不看第一位就行了 for (int i = s.size() - 1; i >= 0; i--) { if (s[i] == '1') { s[i] = '0'; break; } else { s[i] = '1'; } } for (int i = 1; i < s.size(); i++) if (s[i] == '0') zero++; cout << min(one, 1 + zero) << endl; return 0; }
4.累了,没看了