几个人在玩游戏。每个玩家都有一定数量的胜利和失败(可能相等或不同)。编写一个程序,打印每个程序的名称和最终结果。
注意:如果有一个玩家多次尝试,那么胜利和损失将加到最终结果中。
输入•在收到字符串“ End”之前,将按以下顺序为您提供球员的信息:o名称:字符串o胜利:正整数o损失:一个正整数
using namespace std;
int main()
{
char str[100][20], t[20];
int i, j;
int n;
cin >> n;
int first[100];
int second[100];
for (i = 0; i < n; i++)
{
cout << " ";
cin >> str[i];
cin >> first[i];
cin >> second[i];
}
for (i = 1; i < n; i++)
{
for (j = 1; j < n; j++)
{
if (strcmp(str[j - 1], str[j]) > 0)
{
strcpy_s(t, str[j - 1]);
strcpy_s(str[j - 1], str[j]);
strcpy_s(str[j], t);
}
}
}
// cout << "\n Names Sorted in Alphabetical Order : \n\n";
for (i = 0; i < n; i++)
{
cout << " ";
cout << str[i] <<endl;
cout << first[i] - second[i] << endl;
}
return 0;
}
首先,您对数据结构的选择值得怀疑。本质上,您具有并排的三个数组,在修改其中任何一个的“顺序”时,必须全部保持[[together。这是代码中缺少的关键逻辑部分。
第二,您正在使用标准C ++库的none
,除了进行IO操作外。尽管这可以编译,甚至可以工作,但您并没有满足任意条目数的键属性。您的代码假定第一个输入是玩家人数。问题描述中没有任何地方可以验证该假设。在读取名称"End"
之前,和/或在标准输入(stdin)被认为是eof的前提下,您应该一直读着名称,胜利,损失三重奏[[continuous]],直到(stof被认为是安全的)。 Dynamic是必需的存储,并且C ++标准库作为众多可用的容器来使之成为可能,最常见的是std::vector
#include <iostream>
#include <vector>
#include <string>
#include <utility>
int main()
{
std::vector< std::string > names;
std::vector< int > wins;
std::vector< int > losses;
std::string name;
int win;
int loss;
while (std::cin >> name && (name != "End") && std::cin >> win >> loss)
{
names.emplace_back(name);
wins.emplace_back(win);
losses.emplace_back(loss);
}
size_t len = names.size();
while (len-- > 0)
{
for (size_t j = 0; j < len; ++j)
{
if (names[j + 1] < names[j])
{
// swap all three arrays
std::swap(names[j + 1], names[j]);
std::swap(wins[j + 1], wins[j]);
std::swap(losses[j + 1], losses[j]);
}
}
}
std::cout << "Names Sorted in Alphabetical Order:\n";
for (size_t i = 0; i < names.size(); ++i)
{
std::cout << names[i] << '\n';
std::cout << wins[i] - losses[i] << '\n';
}
return 0;
}
注意,这是不可思议的不可维护的。随着越来越多的信息与每个名称相关联(不仅赢了,而且输了,还包括家庭住址,电话号码,演奏方式或位置等),维护更多的数组成为噩梦。相反,您选择一个
object
来承载所有玩家信息,并选择一个容器保存该对象的实例。毫无疑问,您将在学习中学习更多。但是同时,上面的代码符合问题陈述,同时解决了所发布代码中缺少的关键逻辑部分。如果您要在排序过程中交换姓名,则也必须交换赢/输记录,因此,处于任意位置n
的玩家都会获得其赢/输信息。