美团2018测开编程题——改卷子&魔法表

xiaoxiao2021-02-28  115

魔法表

时间限制:C/C++语言 2000MS;其他语言 4000MS 内存限制:C/C++语言 65536KB;其他语言 589824KB 题目描述: 时辰送给了她的女儿凛一块魔法表,但是魔法表的表针总是指向奇怪的地方,所以凛决定修理一下这块表。当前表的指针指向了一个方向 n1 (在 0 度到 359 度之间,正北方向是 0 度,正东方向是 90 度),她需要将表针调节到方向 n2 。她可以选择顺时针旋转表针,也可以逆时针旋转表针,若顺时针旋转的话,角度会增大,逆时针旋转则角度会减小。当顺时针旋转到 359 度后,若再旋转一度,则会回到 0 度。凛想要让表针旋转的角度尽量小,也就是以最短路径旋转到正确的方向,请你告诉她应该如何旋转。 当有多种旋转方式能够旋到正确的方向,且旋转过的角度相同时,凛会选择顺时针旋转。 输入 第一行包含一个整数 n1 ,表示表针当前的方向。 第二行包含一个整数 n2 ,表示表针应该指向的正确方向。 0 ≤ n1,n2 ≤ 359 输出 若需要顺时针旋转 x 度,输出x。 若需要逆时针旋转 x 度,输出$$-x。

样例输入 Input Sample 1 315 45 Input Sample 2 45 270 样例输出 Output Sample 1 90 Output Sample 2 -135*

#include<iostream> #include<string> using namespace std; int main(){ int n1, n2; while (cin >> n1){ cin >> n2; int tmp1 = 0, tmp2 = 0; int res = 0; if (n1 > n2){ tmp1 = 360 - (n1 - n2); tmp2 = n1 - n2; if (tmp1 > tmp2) res = -tmp2; else res = tmp1; } else{ tmp1 = n2 - n1; tmp2 = n1 360 - n2; if (tmp1>tmp2) res = -tmp2; else res = tmp1; } cout << res << endl; } system("pause"); return 0; }

改考卷

时间限制:C/C 语言 2000MS;其他语言 4000MS 内存限制:C/C 语言 65536KB;其他语言 589824KB 题目描述: 在上小学的时候,我们经常碰到这样的事:考完试后老师懒得改试卷,于是让我们同桌相互交换试卷后为对方批改。但是后来老师发现这样作容易出现作弊,于是他想了一个新办法。老师将同学分成了 n 个组,其中编号为i的组中有 si 个人。然后老师会按某种顺序依次访问这些组。 对于他访问的第一个组,他会将这组内的所有试卷都收走,放置在桌上;对于他后续访问的每一个组,首先他会从桌上的试卷最上方拿出该组对应人数数量的试卷,随机分配给该组每个人一张试卷让他们进行批改,而后再将这组学生自己考的试卷收走放置在桌面试卷的最下方。当他访问完所有的组后他会将桌面上剩余的所有试卷随机分配给他第一个访问的组的学生进行批改。 但他发现这种方法有时候也会出现问题:有可能在中途访问到某个组的时候桌面上的试卷不够分配给这组学生每人一张;也有可能最后会有学生分配到批改自己的试卷,而且这两种情况是否出现是与他访问每个组的顺序有关的。现在他想知道是否存在一种访问顺序能够使以上两种情况都不出现,顺利完成试卷批改呢? 输入 第一一个整数 n ,表示学生组数。2 ≤n ≤ 30 第二行包含 n 个整数,s1,s2,...,sn,分别表示每组学生的人数。1 ≤ si ≤ 10000 输出 若存在一种访问顺序能使试卷顺利批改完成,输出 Yes,否则输出 No。

样例输入 Input Sample 1 2 10 20 Input Sample 2 4 2 3 3 1 样例输出 Output Sample 1 No Input Sample 2 Yes

Hint 对于第 2 组样例,我们可以选择先访问人数为 3 的组,再访问人数为 3 的组,再访问人数 为 1 的组,最后访问人数为 2 的组。

#include<iostream> #include<string> #include<vector> #include<algorithm> using namespace std; string res[2] = { "Yes", "No" }; int main() { int n; while (cin >> n){ vector<int> s(n); for (int i = 0; i < n; i++) cin >> s[i]; sort(s.begin(), s.end()); reverse(s.begin(), s.end()); int first = s[0]; int tmp = 0; for (int i = 1; i < n; i++) tmp = tmp + s[i]; if (first>tmp) cout << res[1]; else cout << res[0]; } system("pause"); return 0; }
转载请注明原文地址: https://www.6miu.com/read-58761.html

最新回复(0)