嘉賓與幸運的中獎者程式設計題
阿新 • • 發佈:2020-08-05
今天有同學做菊花廠的校招機試題遇到這個問題。
題目要求
- 輸入一個包含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; } }