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.累了,没看了



