题解
判断偶数
1 条题解
-
0
P4392 判断偶数(入门)
解题思路
输入 n 个整数,要输出两样东西:这 n 个数里偶数的个数,以及它们是不是"全都是偶数"。
做法很直接,一边读一边判断: 用一个计数器 cnt,遇到偶数(a % 2 == 0)就加 1; 再用一个"标志" all 表示"到目前为止看到的全是偶数",一开始设成 1(表示是)。只要遇到一个奇数,就把 all 改成 0,并且以后都不再改回来。
读完后先输出 cnt,再根据 all 是 1 还是 0 输出 Yes 或 No。
拿样例 2 4 6 8 10 来说,五个全是偶数,cnt = 5,all 一直是 1,输出 "5" 和 "Yes",和样例一致。
边界情况:如果这 n 个数里混进一个奇数,比如 2 4 6 7 10,那么 cnt = 4,all = 0,输出 "4" 和 "No"。如果 n 个数全是奇数,cnt = 0,all 也是 0,输出 "0" 和 "No"。注意"偶数个数"和"是否全偶"是两个不同的问题:偶数个数可以是 0(全是奇数),但这时一定不是全偶。
参考代码
// 程序用途:统计n个数中偶数的个数,并判断是否全部都是偶数 #include <iostream> using namespace std; int main() { int n; cin >> n; int cnt = 0; // cnt统计偶数个数 int all = 1; // all=1表示"目前看到的全是偶数" for (int i = 0; i < n; i++) { int a; cin >> a; if (a % 2 == 0) cnt++; // 是偶数就计数加1 else all = 0; // 一出现奇数,就不是全偶了 } cout << cnt << endl; // 第一行:偶数个数 if (all) cout << "Yes" << endl; // 第二行:全偶输出Yes else cout << "No" << endl; // 否则输出No return 0; }复杂度分析
循环读入 n 个数,时间复杂度是 O(n);空间上只用了计数器和一个标志变量,额外空间复杂度是 O(1)。
- 1