编号从1到n。第1次小科会把编号从1到n的纸杯上都放上气球;第2次只看编号为2和2的倍数的纸杯:如果有气球就打爆,如果没有气球就放上气球;第3次只看编号为3和3的倍数的纸杯:如果有气球就打爆,如果没有气球就放上气球;第4次只看编号为4和4的倍数的纸杯:如果有气球就打爆,如果没有气球就放上气球……现在请你求出,当小科玩了m次以后,哪些编号的纸杯上还有气球?小科一共打爆了多少气球?c++
时间: 2024-02-25 16:55:15 浏览: 104
北师大版四年级上册数学第1课时滴水实验教学课件.ppt
以下是一个解决此题目的 C++ 程序:
```cpp
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
vector<bool> cups(n+1, true); // 初始化所有纸杯都有气球
int balloons = n; // 统计一开始有多少个气球
for (int i = 2; i <= m; i++) {
for (int j = i; j <= n; j += i) {
if (cups[j]) { // 如果该纸杯上有气球,则打爆气球
cups[j] = false;
balloons--;
} else { // 否则放上气球
cups[j] = true;
balloons++;
}
}
}
// 输出还有气球的纸杯编号
cout << "还有气球的纸杯编号:";
for (int i = 1; i <= n; i++) {
if (cups[i]) {
cout << i << " ";
}
}
cout << endl;
// 输出小科打爆的气球数量
cout << "小科打爆了 " << (n - balloons) << " 个气球" << endl;
return 0;
}
```
程序首先读入纸杯数量 n 和小科玩的次数 m,接着用一个 vector 来表示每个纸杯上是否有气球。在每次玩的过程中,程序会依次遍历可以被当前次数整除的纸杯,如果该纸杯上有气球则打爆气球,否则放上气球。最后程序会输出还有气球的纸杯编号和小科打爆的气球数量。
阅读全文