我在做一个代码挑战问题:
卡班队长:国宝是一款流行的足球模拟游戏,可以在大多数智能手机上玩。在这个游戏中,你建立了一个由11人组成的团队,然后在故事模式或多人模式下进行竞争。你可能已经知道,一场足球比赛由11名球员组成,其中包括一名守门员和十名外场球员。
每个外场球员的能力在三个方面得分:攻击(运球,投篮,传球),防守(铲球,拦截,拦截)和身体(速度,力量,技术)。例如,A:4103 D:2837 P:3410的球员是典型的进攻球员(前锋位置),因为他的进攻(4103)比防守(2837)和身体(3410)高。另一方面,A:1546,D:5209,P:2708的球员是典型的防守球员,因为他的防守远高于他的进攻和体能。守门员有一个不同的衡量标准(节约和身体),但这不是我们关心的问题。
一个团队的实力仅仅是所有主要外场球员的能力得分之和。请注意,团队实力得分不考虑团队的平衡,例如,每名球员A:8000、D:1000、P:1000的10名队员比A:3000、D:3000、P: 3000的团队强;第一队的实力为100,000 (10 *(8,000+ 1000 + 1000)),第二组为90,000 (10 *(3,000+3,000))。
假设你有10名主要的外场球员和N名预备队队员。如果你最多可以替换1名主要的外场球员(有后备球员),你能获得的最大团队实力是多少?
输入以整数开头:T (1≤T≤20),表示用例的数量。
每个大小写包含以下输入块:每个大小写以整数开头:N (1≤N≤10),表示后备玩家的数量。接下来的10行包含三个整数:Ai Di Pi (100≤Ai,Di,Pi≤20,000),代表第一主玩家的攻击、防御和物理得分。接下来的N行包含三个整数:Aj Dj Pj (100≤Aj,Dj,Pj≤20,000),代表jth预备役球员的攻击、防御和物理得分。
对于每一种情况,输出在一行“case #X: Y”中,其中X是大小写号(从1开始),Y是各自大小写的输出。
#include <iostream>
using namespace std;
int main () {
const int totalOriginalPlayer {10};
int testCases {};
cin >> testCases;
for (int i = 1; i <= testCases; i++) {
int reserve {}, total {}, lowest {500000}, highest {};
int attack {}, defense {}, physical {};
cin >> reserve;
int reservePlayers [reserve];
int powerReservePlayers [reserve];
int powerOriginalPlayers [totalOriginalPlayer];
// Get power of all original players, calculate sum and find the minimum
for (int i = 0; i < totalOriginalPlayer; i++) {
cin >> attack >> defense >> physical;
powerOriginalPlayers[i] = attack + defense + physical;
total += powerOriginalPlayers[i];
if (powerOriginalPlayers[i] < lowest) {
lowest = powerOriginalPlayers[i];
}
}
// Get power of all reserve players and find the maximum power
for (int j = 0; j < reserve; j++) {
cin >> attack >> defense >> physical;
powerReservePlayers[j] = attack + defense + physical;
if (powerReservePlayers[j] > highest) {
highest = powerReservePlayers[j];
}
}
// Subtract total with lowest and add highest
if (lowest < highest) {
total = total - lowest + highest;
} else if (lowest >= highest) {
total = total;
}
// Print out total
cout << "Case #" << i << ": "<< total << endl;
}
}发布于 2019-09-26 11:22:21
using namespace std;。for (int i = 1; i <= testCases; i++)在C++中,通常使用!=作为结束条件,并使用预增量运算符(因为我们不是临时值)。使用基于零的索引通常更安全,如果我们需要转换为基于一个的索引:for (int i = 0; i != testCases; ++i),只需添加一个用于打印的索引即可。int attack {}, defense {}, physical {};。声明变量(特别是POD变量)尽可能接近使用点,以最小化它们的作用范围,并避免将它们用于多个事情。这些应该在每个最里面的循环中声明。reserve不是常量值,因此这是无效的C++:int reservePlayers [reserve];,即使某些编译器允许它。我们应该使用std::vector代替。(这个特定的数组似乎也未使用!)for (int i = 0; i < totalOriginalPlayer; i++)循环条件变量阴影外部循环的i变量。这可能会造成混乱。最好为循环变量选择一个有意义的名称,例如outfielderIndex。std::accumulate,std::min_element和std::max_element。https://codereview.stackexchange.com/questions/229691
复制相似问题