gpt4 book ai didi

c++ - 计算重复项并将这些计数器存储在数组 C++ 中

转载 作者:行者123 更新时间:2023-11-28 00:00:13 24 4
gpt4 key购买 nike

假设我有 {6, 6, 8, 9, 8, 1}6 重复 2 次,8 重复 2 次。每个重复项应除以计数器。所以它应该是 {3,3,4,9,4,1}。

为此,我正在尝试制作计数器数组

例如cntArray{2,2,2,1,2,1}(2:重复2次)

这样我就可以将这些数字除以计数器

{6,6,8,9,8,1}/{2,2,2,1,2,1} = {3,3,4,9,4,1}

而且我还没有了解 map 所以想通过使用 vector 来做到这一点,不使用 map 进行排序。

这是我的代码:

int main() {
vector<int> id_v;
vector<int> gram_v;
int id, gram = 0;
int childNum = 0;
int counter;
int *cntArr = new int[0];

cout << "Enter the number of children : ";
cin >> childNum;

for (int i = 0; i < childNum; i++) {
cin >> id >> gram;
id_v.push_back(id);
gram_v.push_back(gram);
}

std::stable_sort(gram_v.begin(), gram_v.end(), acompare);
for (int i = 0; i < childNum; i++) {
for (counter = 1; i + counter < childNum && gram_v[i + counter] == gram_v[i];)
counter++;

if (counter > 1) {
// cntArr[gram_v[i]] = counter; //cntArr[100] = 2;
for (int j = counter; j > 0; j--)
gram_v[i - j + 1] /= counter;
counter = 1;
} else {
// cntArr[gram_v[i]] = counter; //cntArr[60] = 1;
gram_v[i] /= counter;
}

cout << gram_v[i] << "\t" << endl;
}
}

或者请给我一些更好的主意!

最佳答案

这是我能想到的数字 0->9 最简单的方法:

#include <iostream>
#include <vector>

using namespace std;

int main()
{
vector<int> MyVec = {6, 6, 8, 9, 8, 1};
int Counters[] = { 0,0,0,0,0,0,0,0,0,0 }; // indexes will represent numbers from 0->9

for (int i = 0; i < MyVec.size; i++) // count each number
{
Counters[MyVec[i]]++;
}

for (int i = 0; i < MyVec.size; i++) // replace each number with it self divided by its counter
{
MyVec[i] = Counters[MyVec[i]];
}

return 0;
}

对于0->9以外的输入数据,遵循Thomas Matthews设计。这应该有效:

#include <iostream>
#include <vector>

struct Number_Counts
{
int element;
int counter;
Number_Counts(int _element) { element = _element; counter = 1; }
};

bool IncrementIfFound(std::vector<Number_Counts> &, int );
int GetCounter(std::vector<Number_Counts>, int);

int main()
{
std::vector<int> OriginalData = {6, 6, 8, 9, 8, 1};
std::vector<Number_Counts> MyVector;

for (int i = 0; i < OriginalData.size(); i++) // populate counters
{
if (!IncrementIfFound(MyVector, OriginalData[i])) // if true, would be incremeneted already, if false, add as new
{
Number_Counts temp(OriginalData[i]);
MyVector.push_back(temp);
}
}

for (int i = 0; i < OriginalData.size(); i++) // submit new value (old / its counter)
{
OriginalData[i] /= GetCounter(MyVector, OriginalData[i]);
}

return 0;
}

bool IncrementIfFound(std::vector<Number_Counts> &_Container, int _element)
{

for(int i = 0; i < _Container.size(); i++ )
if (_Container[i].element == _element)
{
_Container[i].counter++;
return true;
}
return false;
}
int GetCounter(std::vector<Number_Counts> _Container, int _element)
{
for (int i = 0; i < _Container.size(); i++)
if (_Container[i].element == _element)
return _Container[i].counter;
}

结果:

输入:{6, 6, 8, 9, 8, 1}

输出:3 3 4 9 4 1

关于c++ - 计算重复项并将这些计数器存储在数组 C++ 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39708504/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com