给定一系列数字报告,哪些重复和重复了多少次
Given a sequence of numbers report which have been repeated and how many times
例如
1 1 1 1 2 3 3 4 5 5 5
1 repeated 3 times,
3 repeated 1 time,
5 repeated 2 times
这是代码,但它有一些麻烦
int i, k, m, number, number_prev, e;
cout << "Insert how many numbers: ";
cin >> m;
cout << "insert number";
cin >> number;
number_prev = number;
int num_rep[m]; //array of repeated numbers
int cant_rep[m]; // array of correspondent number of repetitions
e = 0;
for (i=1; i<m; i++)
{
cin >> number;
if (number == number_prev)
{
if (number == num_rep[e-1])
cant_rep[e-1]++;
else
{
num_rep[e] = number;
cant_rep[e] = e + 1;
e++;
}
}
else
e = 0;
number_prev = number;
}
for (k = 0; k < e; k++)
cout << "nnumber " << num_rep[k] << " repeated " << cant_rep[k] << " times.n";
你应该学习算法和数据结构。这使您的代码更简单。仅使用保存对的关联容器
a number --> how many times it repeats
可以充分简化您的程序
int main()
{
std::map<int, int> map;
int v;
while(std::cin >> v) {
map[v]++;
}
for (auto it = map.cbegin(); it != map.cend(); ++it) {
if (it->second > 1) {
std::cout << it->first << " repeats " << it->second - 1 << " timesn";
}
}
}
std::map
是一个关联容器。
您可以将其视为具有唯一键的key-->value
存储。
真实单词中的示例是字典:
你有词和它的定义。单词是一个键,定义是一个值。
std::map<int, int> map;
^^^ ^^^
| |
key type value type
您可以使用运算符引用[]
值。
这就像通常的数组一样工作,除了使用键而不是索引。
您还可以使用迭代器检查映射中的所有键值对。
it = map.cbegin(); // refers to the first key-value pair in the map
++it; // moves to the next key-value pair
it != map.cend(); // checks, if we at the end of map, so examined all elements already
正如我指出的那样,map 保存键值对。
而在标准C++库中,struct std::pair
用于表达对。
它有 first
个和 second
个成员,代表第一和第二值,成对排列。
在 map 的情况下,first
是一个键,second
是一个值。
同样,我们将一个数字存储为键以及它在值中重复的次数。
然后,我们读取用户输入并增加给定键的值。
之后,我们只需检查存储在地图中的所有元素并打印它们。
int num_rep[m]; //array of repeated numbers
int cant_rep[m]; // array of correspondent number of repetitions
在这里,m 仅在运行时已知,数组大小必须在编译时已知。 请改用std::vector
。
代码看起来像一个 C 风格的C++程序:
1.不需要在块的开头声明变量。使用前声明它们,更具可读性。
2.使用像std::vector
这样的STL
类型可以为您节省很多麻烦。
- 你说"插入 m 个数字",但
for (i=1; i<m; i++)
会循环 m-1 次,这可能不是你想要的。 - 作为补充建议,你应该对从外部世界获得的变量进行输入检查,比如
cin >> m;
,因为它可以是零或负数。
相关文章:
- 在 C++ AMP 数组中复制数据多少次?
- C++ 检查结果数组中有多少次数字
- 我如何使它,无论用户用空白字符串按 Enter 多少次,它总是打印"开始"字符串?
- 如何计算整数链中使用了多少次数字?
- 如果函数按值传递并按值返回,将调用复制构造函数多少次
- 复制构造函数被调用了多少次?
- 此函数调用了多少次
- 我需要声明多少次 std::ios::sync_with_stdio(假);在程序中
- 尝试创建一个读取.txt文件,显示它,计数唯一单词的程序,并在使用了多少次的情况下显示独特的单词.C
- 算法 - 集合中出现了多少次
- GCC通过输入源代码进行了多少次通过
- 根据输入文本对单词进行排序,具体取决于重复多少次
- 假设没有编译器优化,则将创建多少次此对象
- 如何计算在Sentinel Loop C 中输入多少次输入
- MPI_REDUCE调用的减少操作是多少次
- 数组在此代码中复制了多少次
- 我怎么能知道13号星期五在一年中出现了多少次
- Q_IMPORT_PLUGIN,我可以使用多少次
- 如何计算循环执行了多少次?C++
- 给定一系列数字报告,哪些重复和重复了多少次