1.复制可乐,有4个人排队从自动售货机买复制可乐,买完就复制自己(复制对复制品有效),比如A买一轮有2个A,买两轮有4个A。。。。问在可乐数目给定情况下,最后买到可乐的人的名字。
买可乐的4个人:Alice,Bob,Cathy,David
输入:N
输出:名字
分析:通过每次减去被买走的可乐之道获得最后一轮的可乐数目m,此时(m-1)/2^k)即为所求。
代码如下:
void FuZhiCoclor()
{
int N;
char *name[] = { "Alice","Bob","Cathy","Daved" };
cin >> N;
int result = -1;
if (N < 4)
{
result = (N-1) % 4;
}
else
{
int k = 1;
int value = pow(2, k + 1);
while (N - value>0)
{
N -= value;
k++;
value = pow(2, k + 1);
}
result = (N - 1) / pow(2, k-1);
}
cout << name[result];
}
2.球王评选
问题描述:
四年一度的世界杯又来了!小多在公司内发起了一个票选最强球星的活动。共有 N 个候选球星,每位投票者需要在选票上为每位候选球星评定一个实例等级,等级由英文字母表示,'a' 级最高,'z' 级最低,共26级。
我们称候选球星 X 强于候选球星 Y,当「 X 的评级比 Y 高」的票数高于「 Y 的评级比 X 高」的票数。若一个候选球星强于任一其他候选球星时,则称该球星为“球王”。根据这个规则,至多只会有一个球王。需要注意的是也可能没有球王。
现在给出所有 M 张选票,请你帮小多判断一下哪位候选球星是球王。
输入描述:
第一行包含2个整数 N、M,分别表示候选球星数量以及选票数量。
接下来有 M 行,每行是一个长度为 N 的字符串,每个字符串表示一张选票上的信息。每个字符串的第 k (0 <= k < N) 个字符,表示这张选票对第 k 个候选球星的评级。
数据范围:
1 <= N <= 50
1 <= M <= 50
字符串只包含小写英文字母(a-z)。
输出描述:
若有球王,则输出一行仅包含一个整数 X,表示编号