按照卡中心校园招聘的要求,HR小招和小商需要从三个科室中(分别为A、B、C)抽派面试官去往不同城市。
两名HR按照以下规定轮流从任一科室选择面试官:每次至少选择一位,至多选择该科室剩余面试官数。最先选不到面试官的HR需要自己出差。
假设HR小招和小商都不想出差且每次选择都采取最优策略,如果是小招先选,写一个函数来判断她是否需要出差。如果不需要出差,请给出第一步的最优策略。
输入为三个正整数,分别代表三个科室的面试官人数,用英文逗号分隔
若小招需要出差,则输出:1;
若小招不需要出差,则输出:第一步选择的科室名称和选择人数,用英文逗号分隔
1,8,9
1
2,0,4
C,2
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String inputString = sc.next().toString();
String stringArray[] = inputString.split(",");
int num[] = new int[stringArray.length];
for (int i = 0; i < stringArray.length; i++) {
num[i] = Integer.parseInt(stringArray[i]);
}
int a = num[0];
int b = num[1];
int c = num[2];
int bool = a ^ b ^ c;
if (bool == 0)
System.out.print(1);
else {
if ((a ^ b) < c) {
System.out.print("C," + (c - (a ^ b)));
}
if ((a ^ c) < b) {
System.out.print("B," + (b - (a ^ c)));
}
if ((b ^ c) < a) {
System.out.print("A," + (a -(b ^ c)));
}
}
}
}
#include <iostream>
using namespace std;
int HighBit(int a)
{
int cnt = 0;
while (a)
{
a >>= 1;
cnt++;
}
return cnt;
}
int main()
{
char c1, c2;
int room[3];
cin >> room[0] >> c1 >> room[1] >> c2 >> room[2];//scanf可以格式化读入
int p = 0;
for (int i = 0; i < 3; i++)
{
p ^= room[i];
}
if (!p) cout << '1' << '\n';
else
{
int i = 0;
for (; i < 3; i++)
{
if (HighBit(room[i]) == HighBit(p)) //两者最高位的1相同
{
p ^= room[i];
break;
}
}
int ans;
for (int j = room[i]-1; j >= 0; j--)
{
if (!(p^j))
{
ans = room[i] - j;
break;
}
}
cout << (char)('A' + i) << ',' << ans << '\n';
}
return 0;
}
#include <iostream>
#include <vector>
class Solution {
public:
bool isFree2Travel(const std::vector<int> &Interviewer)
{
int XOR = 0;
for (auto &val:Interviewer)
{
XOR = XOR ^ val;
}
if (XOR == 0)
{
return false;
} else
{
BestStrategy(Interviewer);
return true;
}
}
char getDepartment()
{
return this->Department;
}
int getCount()
{
return this->Count;
}
private:
void BestStrategy(const std::vector<int> &Interviewer)
{
for (auto i = 0; i != Interviewer.size(); ++i)
{
auto Num1 = Interviewer.at((i + 1) % Interviewer.size()),
Num2 = Interviewer.at((i + 2) % Interviewer.size());
if ((Num1 ^ Num2) < Interviewer.at(i))
{
Department += i;
Count = Interviewer.at(i) - (Interviewer.at((i + 1) % Interviewer.size()) ^
Interviewer.at((i + 2) % Interviewer.size()));
return;
}
}
}
char Department = 'A';
int Count = 0;
};
int main()
{
int a = 0, b = 0, c = 0;
scanf("%d,%d,%d", &a, &b, &c); // 如果哪位 C++ 大佬知道以英文逗号分隔的输入直接用 cin 接收的方法,希望能抬小弟一手告诉小弟一下,感激不尽
std::vector<int> vi;
vi.push_back(a);
vi.push_back(b);
vi.push_back(c);
Solution s;
if (s.isFree2Travel(vi))
{
std::cout << s.getDepartment() << "," << s.getCount() << std::endl;
} else
{
std::cout << 1 << std::endl;
}
return 0;
}