week3-[分支结构]2023
week3-[分支结构]2023
题目描述
读入一个四位数 nnn,判断该四位数的四个数码(千位、百位、十位、个位)任意重新排列后(可以与原数相同),是否可能形成四位数 202320232023。
输入格式
输入共 111 行,该行包括 111 个四位数 nnn。
输出格式
输出只有 111 行,如果四位数 nnn 的四个数码重新排列能形成 202320232023,则输出 “Yes”,否则输出 “No”(输出时不需要输出引号)。
样例 #1
样例输入 #1
3202
样例输出 #1
Yes
样例 #2
样例输入 #2
2413
样例输出 #2
No
样例 #3
样例输入 #3
2023
样例输出 #3
Yes
样例 #4
样例输入 #4
2230
样例输出 #4
Yes
提示
样例解释1
320232023202 按百位、十位、个位、千位的顺序重新排列,可以形成 202320232023。
样例解释2
241324132413 的四个数码无论怎样重新排列,都不可能变为 202320232023。
样例解释3
输入的数本身就是 202320232023,任意重新排列后自然也可以产生 202320232023。
样例解释4
223022302230 按千位、个位、百位、十位的顺序重新排列,可以形成 202320232023。
数据范围
对于所有数据,1000≤n≤99991000 \le n \le 99991000≤n≤9999。
解题思路
- 分解数码:把输入的四位数拆成个位、十位、百位、千位。
- 统计数字频率:用一个数组
cnt[10]
记录每个数字出现的次数。 - 对比目标频率:我们知道
2023
→2
出现 2 次,0
出现 1 次,3
出现 1 次。- 如果输入的数码统计结果跟这个完全一样 → 输出
"Yes"
- 否则 → 输出
"No"
- 如果输入的数码统计结果跟这个完全一样 → 输出
C++参考代码
#include <bits/stdc++.h>
using namespace std;int main() {int n;cin >> n;int cnt[10] = {0};// 分解数码int x = n;for (int i = 0; i < 4; i++) {cnt[x % 10]++;x /= 10;}// 目标 "2023" 的频率int target[10] = {0};target[2] = 2;target[0] = 1;target[3] = 1;bool ok = true;for (int d = 0; d <= 9; d++) {if (cnt[d] != target[d]) {ok = false;break;}}cout << (ok ? "Yes" : "No") << endl;return 0;
}