网易互娱人工智能第一批机器学习算法工程师3道编程
1. T个测试用例。用例中,给定 n 个非负整数,按每个数的二进制表示中‘1‘的个数进行分组,求这 n 个数分成几组?
#include <iostream>
#include <unordered_set>
using namespace std;
int func(int x){
int c = 0;
while(x){
c++;
x &= x - 1;
}
return c;
}
int main()
{
int T, n;
cin >> T;
for(int t = 1; t <= T; ++t){
cin >> n;
unordered_set<int> s;
for(int i = 0; i < n; ++i){
int x;
cin >> x;
s.insert(func(x));
}
cout << s.size() << endl;
}
return 0;
} 2. T 个测试用例。每个测试用例,输入 m, t, m1, t1, m2, t2 六个整数。m 是游泳池容量,进水管每分钟进水量为 m1,出水管每分钟出水量为 m2。 进水管每隔 t1 分钟切换状态(“进水”、“关闭”互相切换),出水管每隔 t2 分钟切换一次状态(“出水”、“关闭”互相切换)。初始时,进水管、出水管都是开启状态。
求 t 时刻游泳池里的水量。
游泳池水量不会溢出,水量也不会为负。
#include <iostream>
using namespace std;
int main()
{
int T, m, m1, m2, t1, t2, t;
cin >> T;
for(int i = 1; i <= T; ++i) {
cin >> m >> t >> m1 >> t1 >> m2 >> t2;
int volume = 0;
for(int j = 1; j <= t; ++j) {
int t11 = j / t1 * t1;
// 1: in, 0 stop
bool state1 =
(j / t1 % 2 && j == t11) || (!(j / t1 % 2) && j != t11);
int t22 = j / t2 * t2;
// 1: out, 0 stop
bool state2 =
(j / t2 % 2 && j == t22) || (!(j / t2 % 2) && j != t22);
if(state1 && state2) {
volume += m1 - m2;
} else if(state1) {
volume += m1;
} else if(state2) {
volume -= m2;
}
if(volume > m) {
volume = m;
} else if(volume < 0) {
volume = 0;
}
}
cout << volume << endl;
}
return 0;
} 3. T个测试用例。每个测试用例,给定一个全部是大写字母组成的字符串,允许你至多可将两个字符改成字符'N',求更改后,由连续‘N’组成的串的最长长度。
#include <iostream>
#include <string>
using namespace std;
int func(string s)
{
int s_size = s.size();
int count = 0, begin = 0, end = 0, len = 0;
while(end < s_size) {
if(s[end++] != 'N')
count++;
while(count > 2) {
if(s[begin++] != 'N') {
count--;
}
}
len = max(len, end - begin);
}
return len;
}
int main()
{
int T;
string s;
cin >> T;
for(int i = 1; i <= T; ++i) {
cin >> s;
cout << func(s) << endl;
}
return 0;
} 
