c++ - 不断减去的累积变量,直到达到 0 值
问题描述
我需要 C++ 循环方面的帮助。假设我有 10 个人,用长度为 10 的向量表示,每个人都有一定的年龄。我只想选择年龄<12 的人,并从他们的年龄中减去一个固定值age_fixed
。使用 for 循环看起来非常简单:
vector<float> diff_ages(0);
vector<float> ages {1.2, 7.3, 13.9, 17.8, 45., 72.3, 12.1, 100.3, 6.7, 88.2};
double age_fixed=8.1;
for (auto i=0;i<ages.size();i++){
if (ages[i]<12){
diff_ages.push_back(ages[i]-age_fixed);
}
}
现在我想让事情复杂化:
ages[i]
如果和之间的差异age_fixed
大于0
,我想像往常一样将差异放入diff_ages
;- 如果差值低于
0
, 例如ages[0]
,ages[1]
,ages[8]
, 我想0
输入diff_ages
, 并使用一个累积变量cum_age
来对超出的差值求和 (abs 值); 如果这个累积变量在 10 个年龄的循环结束时大于 0(在我的情况下cum_age=9.1
是在第一个循环结束时),我想一次又一次地重新启动循环,从 中减去累积的值cum_age
,ages[i]
直到cum_ages
变为0
.
关于如何做到这一点的任何想法?我认为我应该使用while
循环,但我不是很熟悉它,我通常使用 for 循环。
+++++++++++++编辑+++++++++++
假设我的ages
向量是:
vector<float> ages {1.3, 7.3, 99.7};
double age_fixed=8.1;
假设我不做任何选择——即我选择了所有三个年龄,没有if
声明ages[i]<12
。在循环的每一步,我都会:
i=0
diff_ages[0]=0
cum_ages=abs(ages[0]-diff_ages)=6.9
i=1
diff_ages[1]=0
cum_ages=abs(ages[0]-diff_ages)+abs(ages[1]-diff_ages)=6.9+0.8=7.7
i=2
diff_ages[3]=91.6
cum_ages=7.7
由于cum_ages>0
在循环结束时,我想重新开始循环,最后cum_ages
只减去ages[i]>0
,在本例中为ages[2]
。在第二个循环之后, cum_ages=0 并且我不需要再次重新启动循环,但假设我有另一个ages[i]=7.8
,我会cum_ages>0
再次重新启动循环。
我想要获得的是diff_ages
值更大或至少等于 的向量,在根据需要用 as 循环0
耗尽值之后。cum_ages
解决方案
推荐阅读
- rabbitmq - 使用 Spring 的 Queue 类创建队列和直接从 RabbitMq 控制台创建有什么区别?
- css - 从less编译到css时-webkit-box-orient丢失
- django - Matplotlib 图像未显示在 Django 模板中
- linux - Run and start denodo platform using Command Line Linux Remote Server without GUI
- c# - 单击调用 JavaScript 函数并将附加数据加载到页面后的 Anglesharp Parse
- spring - spring security注册后如何登录?
- django - Cant get queryset to return list of objects that is descending by tag matches
- r - 如何使用 var 函数获得大矩阵的单个数字结果?
- python - 美国 Plotly Choropleth 地图 - 值错误
- concurrency - TBB concurrent_queue - 访问第一个元素而不弹出它