【发布时间】:2021-04-09 15:05:04
【问题描述】:
有一个练习我一直卡在下面:
#include <iostream>
#include <vector>
using namespace std;
int main() {
const int PAGE_SIZE = 4;
vector<int> sizes = {3, 6, 8, 11, 0, 15, 9};
vector<int> v;
cout << v.size() << endl;
for (int i = 0; i < sizes.size(); i++ ){
int pages = sizes.at(i) / PAGE_SIZE;
if ( sizes.at(i) % PAGE_SIZE ) pages++;
v.resize( pages * PAGE_SIZE );
cout << v.size() << endl;
}
return 0;
}
对于上面的程序,把正在打印的数字按正确的顺序排列!
这个问题的答案和正确的顺序是:
0
4
8
8
12
0
16
12
我一直在尝试解决它,但不太了解 if 语句与模运算符的结合。有人可以帮我解释一下吗?
【问题讨论】:
-
您不需要任何人向您解释这一点。可以向您解释一切的是您的调试器。您是否知道调试器可以在任何给定点向您展示程序如何运行,一次一行,所有变量如何变化,它们的值是什么,您甚至可以设置断点以在它们发生时触发?知道如何有效地使用调试器是每个 C++ 开发人员都必须学习的东西,这对您来说是一个很好的机会!知道如何使用调试器意味着您永远不必请任何人帮助您编写代码。
-
如果您询问
int pages = sizes.at(i) / PAGE_SIZE; if ( sizes.at(i) % PAGE_SIZE ) pages++;的含义,则计算sizes.at(i)除以PAGE_SIZE,四舍五入。普通除法/给出向下取整的答案(准确地说是截为零),然后这个答案加一,除非sizes.at(i)可以被PAGE_SIZE整除。 -
如果你问的是
v.resize( pages * PAGE_SIZE ); cout << v.size() << endl;,那只是实现cout << pages * PAGE_SIZE的一种非常不正当的方式