我创建了一个计算数组中重复项的函数 一切都很好。但我只想输出独特的物品,这是我的问题。
我的功能:
void RepeatedCounter(int n){
int i, j, temp, count= 0;
int *Numbers = new int[n];
for(i=0;i<n;i++){
cout << "Enter the number (" << i+1 << "): ";
cin >> *(Numbers+i);
}
cout << "---------------------\n";
for(i=0;i<n;i++){
temp = *(Numbers+i);
for(j=0;j<n;j++){
if(temp == *(Numbers+j)){
++count;
}
}
if(*(Numbers+i+1) != temp)
cout << *(Numbers+i) << "= " << count << endl;
count= 0;
}
delete []Numbers;
}
主要功能:
int Num_Of_Digits= 0;
cout << "How many numbers: ";
cin >> Num_Of_Digits;
RepeatedCounter(Num_Of_Digits);
示例:
Inputs
1
5
3
5
1
错误的结果(当前输出)
1= 2
5= 2
3= 1
5= 2
1= 2
我想要什么
1= 2
5= 2
3= 1
答案 0 :(得分:4)
这已经为你完成了。
#include <iostream>
#include <algorithm>
#include <iterator>
#include <vector>
int repeated_counter(int n){
std::vector<int> vec;
std::vector<int> uniques;
int t;
for(int i=0; i!=n; ++i)
{
std::cin >> t;
vec.push_back(t);
}
std::sort(vec.begin(), vec.end());
std::unique_copy(vec.begin(), vec.end(),
std::back_inserter(uniques));
for(std::vector<int>::iterator it=uniques.begin();
it!=uniques.end();
++it)
{
std::cout << *it << "="
<< std::count(vec.begin(), vec.end(), *it) << "\n";
}
return 0;
}
请不要使用new
记忆,就像你已经做到的那样,使用矢量会更糟糕。
答案 1 :(得分:4)
首先:将用户数据读入适当的动态容器,如vector
:
std::vector<int> v;
v.reserve(100);
while (true)
{
int n;
std::cout << "Enter the number: ";
if (!(std::cin >> n)) { break; }
v.push_back(n);
}
其次,使用map
:
std::map<int, unsigned int> histogram;
for (int i : v) { ++histogram[i]; }
现在输出计数:
for (auto const & p : histogram)
{
std::cout << "The number " << p->first
<< " appears " << p->second << " times.\n";
}
答案 2 :(得分:1)
试试这个,
for(i=0;i<n;i++){
count= 0;
temp = *(Numbers+i);
bool found = false;
for(j=0;j<n;j++){
if(temp == *(Numbers+j)){
++count;
}
}
for(j=i+1;j<n;j++) {
if(temp == *(Numbers+j)){
found = true;
}
}
if(found) continue;
if(*(Numbers+i+1) != temp)
cout << *(Numbers+i) << "= " << count << endl;
}
答案 3 :(得分:-1)
问题是你只是检查列表中的下一个号码。
if(*(Numbers+i+1) != temp)
cout << *(Numbers+i) << "= " << count << endl;
你应该做的是在列表的前面循环(直到你到达你所在的号码)并检查这些号码中的任何一个是否与你当前的号码相同,并且如果它们不是打印出来的话“T。您也可以在开始计数之前检查该数字,如果已经完成了数字,则不要这样做。