gpt4 book ai didi

c++ - 如何在 vector 中的某个数字之后重新计算一个过程

转载 作者:太空宇宙 更新时间:2023-11-03 17:25:07 26 4
gpt4 key购买 nike

假设我有一系列年份。

int year[20];

计划是创建一个 if 条件并处理年份 vector 中的月份部分。

我想合作的 segmentation 市场是从 9 月到 2 月。因此,我一直想选择的年份范围是 (year >=9 && year <3)

因此我有两个 vector 。一个是年份,另一个是我数数的时候。

例如:

vector <int> year{1,2,3,5,10,2,10,12,11,12,2,2,3,5,8,2,8,12,8,12};
vector <int> list{1,2,3,2,1,1,2,3,2,1,5,3,2,5,6,5,3,2,5,6};

上面两个 vector 的大小都是20。我想做的是计算来自list的 vector 条目。在我正在研究的每一年中。

如果我们查看上面的两个 vector ,year 中的第一个月部分 vector 将是:从年[0] =1 到年[1] =2。计数为 2。

下一段将是:从 year[4] =10 到 year[5] =2。所以打印出的条目将来自 vector list : list[4]=1, and list[5] =1.总计数为 2。

分段工作完成后,我想将计数重新分配为零以再次启动它并遍历 year 的整个 vector .

这是我做的一些工作。我的问题是,我可以在 if 语句中创建段,但我试图在每个年段完成时分配计数 =0。

#include <iostream>
#include <string>
#include <cstdlib>
#include <vector>
using namespace std;
int main()
{
unsigned int count =0;
vector <int> year{1,2,3,5,10,2,10,12,11,12,2,2,3,5,8,2,8,12,8,12};
vector <int> list;

for (int x =0; x<20; x++)
{
//cout << "random number" << (1+ rand()%12)<< endl;
list.push_back((1+ rand()%4));
}

for (int j=0; j<=20; j++)
{
if (year[j] >=9 && year[j]<3)
{
count++;
cout <<list[j]<< "counting the entry of each segment"<< count<<endl;
}
}
}

如果 vector year 中的条目,我想选择段的方式例如,1=一月,2=二月满足九月到二月的条件。所以每个段将大于或等于 9 且小于 3。
随着我递增到 vector year ,我找到一个满足条件的段,然后转到下一个再次满足条件的段。

每次我对每个段完成 if 条件下的操作时,我都想分配计数 =0,这样我就可以重新计算下一个段中有多少条目。

由于月份按升序排列,从示例 {11, 10}将计为 1,有两个段而不是两个。段将是 {11} 和 {10},而不是 {11, 10},它计算元素条目 =2。

最佳答案

我建议看(year[j]+9)%12而不是直接在 year[j] .
所有 >= 6 都在你的范围内 (6,7,8,9,10,11) ,即不需要的其他 6 个月 (0,1,2,3,4,5) 在外面。这也使得检测新段的开始变得更加容易。

year[j]  (year[j]+9)%12    wanted
1 10 x
2 11 x
3 0
4 1
5 2
6 3
7 4
8 5
9 6 x
10 7 x
11 8 x
12 9 x

vector 中的值变为:

          wanted   reset
1 10 x
2 11 x
3 0 r
5 2
10 7 x
2 11 x
10 7 x r
12 9 x
11 8 x r
12 9 x
2 11 x
2 11 x
3 0 r
5 2
8 5
2 10 x
8 5 r
12 9 x
8 5 r
12 9 x

这显示了您想要重置计数并开始处理新段的位置,即每当 (year[j]+9)%12不大于之前的索引。

公式(year[j]+9)%12通过使用 +9 移动您正在查看的“虚拟月份”来工作部分并确保结果在 12 个月内仍处于 0-11 范围内,通过 %12部分。 IE。 “1”(被视为“10”)被视为高于“12”(被视为“9”)。因此,从 12 (9) 到 1 (10) 不会触发重置,但从 2 (11) 到 3 (0) 会触发重置,因为该段显然结束了。同样从 , 2 (11) 到 10 (7),触发重置;这是必需的,因为 (3-8) 出现在两者之间,因此需要开始一个新的段,即使 10 高于 2。

关于c++ - 如何在 vector 中的某个数字之后重新计算一个过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59573778/

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