大疆创新笔试-机器学习
1. n个字母A m个字母B 组合成一个n m长字符串 满足连续3个不为同一字符串
题目告诉我们输入一定是存在这样的字符串的,可以不用做异常输入判断。
首先对比n 和 m,知道两者中的较大值 long_num 和 较小值 short_num,对应的字符是 item1 和 item2, 如果
long_num - short_num > 1
字符串尾加两个item1 和 一个 item2;
否则 字符串尾加一个item1 和 一个 item2
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main(){
int n, m; cin >> n >> m;
string result{};
string item1{ 'A' }, item2{ 'B' };
int long_num = n, short_num = m;
if (n < m) item1 = 'B', item2 = 'A', long_num = m, short_num = n;
while (long_num > 0 && short_num > 0){
if (long_num - short_num > 1) result = item1 item1 item2, long_num -= 2, short_num--;
else
result = item1 item2, long_num--, short_num--;
}
while (long_num)
result = item1, long_num--;
while (short_num)
result = item2, short_num--;
cout << result << endl;
return 0; }
2. 一个整数N各个位上的数字重新组合是否构成2的n次方。
leetcode 原题
https://leetcode-cn.com/problems/reordered-power-of-2/
2的整数次幂,二进制形式都是首位是1,后面都是0,所以,首先记录输入数的二进制形式的位数,然后遍历至2的32次幂,1是2的0次幂。
bool reorderedPowerOf2(int N) {
long c = counter(N);
for (int i = 0; i < 32; i )
if (counter(1 << i) == c)
return true;
return false; }
long counter(int N) {
long res = 0;
for (; N; N /= 10)
res = pow(10, N % 10);
return res;
}