C++ 给定一系列数字,报告重复了多少次
比如说C++ 给定一系列数字,报告重复了多少次,c++,C++,比如说 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
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";
inti,k,m,number,number\u prev,e;
cout>m;
数量;
数字_prev=数字;
int num_rep[m]//重复数数组
int cant_rep[m];//对应重复次数的数组
e=0;
对于(i=1;i>number;
if(number==number\u prev)
{
if(number==num_rep[e-1])
不能代表[e-1]++;
其他的
{
num_rep[e]=数字;
不能代表[e]=e+1;
e++;
}
}
其他的
e=0;
数字_prev=数字;
}
对于(k=0;kstd::vector
<>代码看起来像是C风格C++程序:
1.不需要在块的开头声明变量,使用前先声明,可读性更强
2.使用STL
类型,如std::vector
,可以在这样的程序中为您节省很多麻烦
在这里,m只有在运行时才知道,数组大小必须在编译时知道。请改用std::vector
<>代码看起来像是C风格C++程序:
1.不需要在块的开头声明变量,使用前先声明,可读性更强
2.使用
STL
类型,如std::vector
,可以在这样的程序中为您节省很多麻烦。您应该学习算法和数据结构。这使您的代码更简单。只需使用关联容器就可以保存对
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 << " times\n";
}
}
}
您可以使用[]
运算符引用值
这与通常的数组类似,只是使用键代替索引
还可以使用迭代器检查映射中存储的所有键值对
正如我指出的,map保存键值对
和标准C++库<代码>结构STD::配对< /代码>用于表示对。 它有
first
和second
成员,它们表示成对存储的第一个和第二个值
对于map,first
是一个键,second
是一个值
std::map<int, int> map;
^^^ ^^^
| |
key type value type
同样,我们将一个数字存储为一个键,以及它在一个值中重复多少次
然后,我们读取用户输入并增加给定键的值
之后,我们只需检查存储在地图中的所有元素并打印它们。您应该学习算法和数据结构。这使您的代码更简单。只需使用关联容器即可保存这些元素对
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 << " times\n";
}
}
}
您可以使用[]
运算符引用值
这与通常的数组类似,只是使用键代替索引
还可以使用迭代器检查映射中存储的所有键值对
正如我指出的,map保存键值对
和标准C++库<代码>结构STD::配对< /代码>用于表示对。 它有
first
和second
成员,它们表示成对存储的第一个和第二个值
对于map,first
是一个键,second
是一个值
std::map<int, int> map;
^^^ ^^^
| |
key type value type
同样,我们将一个数字存储为一个键,以及它在一个值中重复多少次
然后,我们读取用户输入并增加给定键的值
之后,我们只需检查存储在地图中的所有元素并打印它们
,因为它可以是零或负
,因为它可以是零或负
请告诉我们C++中没有可变长度数组的“麻烦”。请使用<代码> STD::向量< /代码>请告诉我们什么是“麻烦”在C++中没有可变长度数组。使用<代码> STD::vector < /代码> 1。在for循环之前有一个CIN >编号,所以总数是m个2。谢谢,但是稍后我会细化代码,首先我想它运行右边。在for循环之前有一个CIN >编号,所以总数是M个数字2。谢谢,但是稍后我会细化代码。首先,我希望它能正常工作,就像一个符咒,谢谢,唯一的问题是我不明白它,我从来没有用过maps@RihardMarius,我试着用breaf解释。希望这有帮助,但是你应该读一些书来了解细节。工作很有魅力,谢谢,唯一的问题是我不懂,我从来没有用过maps@RihardMarius,我尝试希望这对你有所帮助,不过你应该读一些书来了解细节。