完整教程: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 99991000n9999

解题思路

  1. 分解数码:把输入的四位数拆成个位、十位、百位、千位。
  2. 统计数字频率:用一个数组 cnt[10] 记录每个数字出现的次数。
  3. 对比目标频率:我们知道 20232 出现 2 次,0 出现 1 次,3 出现 1 次。
    • 如果输入的数码统计结果跟这个完全一样 → 输出 "Yes"
    • 否则 → 输出 "No"

C++参考代码

#include
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;
}
posted on 2025-08-22 08:21  ljbguanli  阅读(16)  评论(0)    收藏  举报