嘉宾与幸运的中奖者编程题
作者:互联网
今天有同学做菊花厂的校招机试题遇到这个问题。
题目要求
- 输入一个包含6个人名的字符串,人名之间以空格隔开,人名不超过10个字符,第一个名字为嘉宾名字,后面5人为抽奖者名字;
- 定义名字中a或者A的幸运值为1,z或者Z为26;
- 后面5人中谁和嘉宾的幸运值相差最小,谁就获奖,当出现幸运值相差最小的人数为复数时,选取其在名单中排名最靠后的。
①示例输入
ccc aaa bbb fff AAZZ xyx
输出
bbb
②示例输入
ccc aaa bcb fff AAZZ cbb
输出
cbb
程序
#include <iostream>
#include <sstream>
using namespace std;
int sum = 0;
int goal(string name)
{
int length = name.length();
int b[10];//人名不大于10个字符
for (int i = 0; i < length; i++)
{
if (name[i] >= 'a'&&name[i] <= 'z')//如果为小写字母
b[i] = name[i] - 'a'+1;
else //如果为大写字母
b[i] = name[i] - 'A'+1;
}
//计算该人名的幸运值
for (int i = 0; i < length; i++)
{
sum +=b[i];
}
return sum;
}
int main(int argc, char** argv) {
while (1)
{
/*获取字符串*/
string name_array;
getline(cin, name_array);
/*按空格分割人名*/
istringstream str(name_array);
string out;
string name[6];
int i = 0;
while (str >> out) //遇到空格就结束条件判断,执行函数体语句;直到串流全部输出给string对象,值为0
{
name[i] = out;
i++;
}
/*计算幸运值*/
int b[6] = { 0 };
for (int i = 0; i < 6; i++)
{
b[i] = goal(name[i]);
sum = 0;
}
/*计算5名抽奖者和嘉宾的幸运值差值*/
int c[5] = { 0 };
for (int i = 0; i < 5; i++)
{
c[i] = b[i + 1] - b[0];
}
/*计算差值的绝对值*/
int d[5] = { 0 };
for (int i = 0; i < 5; i++)
{
if (c[i] < 0)
d[i] = -c[i];
else
d[i] = c[i];
}
/*寻找差值绝对值中最小一个数字对应的下标,当有多个相同最小值时,取最后一个的下标*/
int n, min;
min = d[0];
for (int i = 1; i < 5; i++)
{
if (d[i] <= min)
n = i; //记录最小值的下标
min = d[n];//更新最小值
}
/*输出中奖者*/
cout << name[n + 1] << endl;
}
}
标签:10,name,嘉宾,int,编程,++,length,中奖者,幸运值 来源: https://www.cnblogs.com/j-c-y/p/13443087.html