第 1 轮(1 小时 30 分钟):由 3 道编码问题组成。
编码问题是:
- 出货量 1
Byteland港口有N艘船。 Bob 是港口的主管。他的工作是给船装载一些货物。他没有浪费任何时间,将一些随机重量的货物装上洗船。但是,所有船的船长都决定,除非每艘船的货物重量相同,否则他们不会取货。现在要以尽可能少的动作来解决这个问题,否则他会遇到麻烦。一次移动意味着将一吨货物从一艘船转移到另一艘船上。他需要你的帮助来找到最少的移动次数。
输入:第一行由一个整数 N (1<=N<=10^4) 组成,即船舶数量,下一行由每艘船的当前货物重量组成 (1<=W<=10^4) .
输出:打印最小移动次数,如果每艘船的重量不可能相等,则打印 -1。
Sample Input 1
5
1 1 1 1 6
Sample Output 1
4
Sample Input 2
10
4 3 2 5 2 1 2 3 3 4
Sample Output 2
-1
我提交的代码是,
C++
#include
using namespace std; int main () { int n; cin >> n; int a[n]; int s=0; for(int i=0;i > a[i]; s=s+a[i]; } if(s%n!=0) cout << -1 <<"\n"; else { int k=s/n; int s1=0; int ans=0; for(int i=0;i k) { s1=s1+(a[i]-k); } else { ans=ans+abs(a[i]-k); s1=s1-abs(a[i]-k); } cout << ans <<"\n"; } }
C++
#include
using namespace std; int main() { int n; cin >> n; int arr[n][n]; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { arr[i][j] = j + 1; } } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if ((i + j) == (n - 1)) cout << '*'; else cout << arr[i][j]; } cout << "\n"; } return 0; }
C++
#include
#include #include using namespace std; int main() { int x, y, minm, maxm, res; cin >> x >> y; minm = std::min(x, y); maxm = std::max(x, y); res = ceil((maxm * 1.0) / (minm + 1)); cout << res; return 0; }
上述解决方案通过了所有样本和隐藏的测试用例。
- 升星
分析示例中给出的输入 N 的输出。编写一个程序来打印类似的模式。
输入:一行包含一个整数,N
输出:从样本中推断出的星号“*”和数字模式。
约束条件: 0
Sample Input 1
1
Sample Output 1
*
Sample Input 2
2
Sample Output 2
1*
*2
Sample Input 3
3
Sample Output 3
12*
1*3
*23
C++
#include
using namespace std; int main() { int n; cin >> n; int arr[n][n]; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { arr[i][j] = j + 1; } } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if ((i + j) == (n - 1)) cout << '*'; else cout << arr[i][j]; } cout << "\n"; } return 0; } 上述解决方案通过了所有样本和隐藏的测试用例。
- 男生和女生
你有 x 没有男孩和 y 没有女孩。您必须将它们排成一条直线,以便最少数量的男孩和最少数量的女孩站在一起。输出以上两个最小值的最大值。
输入:两个整数x,y,即男孩和女孩的编号。
输出:男孩和女孩站在一起的最大最小值。
Sample Input :
3 4
Sample Output :
1
C++
#include
#include #include using namespace std; int main() { int x, y, minm, maxm, res; cin >> x >> y; minm = std::min(x, y); maxm = std::max(x, y); res = ceil((maxm * 1.0) / (minm + 1)); cout << res; return 0; } 上述解决方案通过了所有样本和隐藏的测试用例。
第二轮(30分钟):这一轮只是简单地讨论了第一轮,还有一些编码问题,我只需要讲逻辑和方法。
问题是:
- x 没有汽车,它们的速度在一个数组中给出。您必须计算一辆车战胜另一辆车的次数。例 [5,4,3] 是速度数组,速度为 5 的汽车克服了另外两个,所以答案是 2。
- 您将获得 2 个链表,您必须返回两个链表交集的节点值。
我能够说出第一个问题的方法,但未能回答第二个问题。
最终裁决:已选择