1.题目描述
给出若干个数字,最后一个数字是0,需要统计这些数字中偶数和奇数的个数。
(这里的0仅仅作为数字序列的结束标志,不统计0作为偶数的情况)
2.输入输出格式
- 输入
一行数字,最后一个数字是0。
- 输出
第一行输出偶数个数,第二行输出奇数个数。
例如:
//输入
20 9 7 11 0
//输出
1
3
3.解题思路
利用 while 循环中嵌套 cin 输入来读取数字序列,然后使用 if 来判断是否读取结束。
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, oushu = 0, jishu = 0;
while (cin >> n) {
if (n != 0) {
//判断是奇是偶
if (n % 2 == 0) {
oushu += 1;
}
else { jishu += 1; }
}
else { break; }
}
cout << "偶数有" << oushu << "个" << endl << "奇数有" << jishu << "个";
return 0;
}
4.运行结果
5.细节问题
如果在使用 if 判断时,没有使用 else 处理其它条件而是直接 break 跳出的话,执行完 if 部分后就会直接执行 break ,这样的话最终的运行结果就是只进入 while 中一次的结果。
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, oushu = 0, jishu = 0;
while (cin >> n) {
if (n != 0) {
//判断是奇是偶
if (n % 2 == 0) {
oushu += 1;
}
else { jishu += 1; }
}
break;
}
cout << "偶数有" << oushu << "个" << endl << "奇数有" << jishu << "个";
return 0;
}
运行结果:
但是如果在 if 中加入 continue ,就能够继续执行 while 循环,而不是只执行一次。
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, oushu = 0, jishu = 0;
while (cin >> n) {
if (n != 0) {
//判断是奇是偶
if (n % 2 == 0) {
oushu += 1;
}
else { jishu += 1; }
continue;
}
break;
}
cout << "偶数有" << oushu << "个" << endl << "奇数有" << jishu << "个";
return 0;
}
运行结果:
重点:
continue的作用在于只是结束当前循环,然后执行下一次循环;
而break是结束整个循环,跳出循环体。
6.题目升级
在之前题目的基础上,去掉0作为结束标志的条件,思考如何使输入结束。
这时候需要输入 ctrl + z 再按下回车来结束数据输入。
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, oushu = 0, jishu = 0;
while (cin >> n) {
//判断是奇是偶
if (n % 2 == 0) {
oushu += 1;
}
else { jishu += 1; }
}
cout << "偶数有" << oushu << "个" << endl << "奇数有" << jishu << "个";
return 0;
}
运行结果: