如何在向量中某个数字之后重新计算进程



假设我有一个年份数组。

int year[20];

该计划是创建一个 if 条件,并使用年份向量中的月份段。

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

因此,我有两个向量。一个是年份,另一个是我数数条目。

例如:

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};

上述两个向量的大小均为 20。我想做的是计算我正在研究的每个年份段中list的向量条目。

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

下一段将是:从年[4] =10 到年 [5] =2。因此,打印输出条目将来自向量listlist[4]=1, and list[5] =1.,总数为 2。

分段工作完成后,我想将计数重新分配给零以再次启动它并遍历整个year向量。

这是我所做的一些工作。我的问题是,我可以在 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;
}
}
}

如果向量中的条目year例如,1 = 1 月,2 = 2 月满足 9 月至 2 月的条件,我想选择段的方式。 因此,每个段将大于或等于 9 且小于 3。
当我递增到向量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

向量中的值变为:

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部分并确保结果在 0-11 个月内仍然在 0-11 范围内,即%12部分。 即"1"(被视为"10"(高于"12"(被视为"9"(。因此,从 12 (9( 到 1 (10( 不会触发重置,但从 2 (11( 到 3 (0( 确实会触发重置,因为段显然结束了。同样从 , 2 (11( 到 10 (7( 触发重置;这是必需的,因为 (3-8( 发生在两者之间,因此需要启动一个新段,即使 10 高于 2。

最新更新