题目背景
搬运自 [CZOI2025 A] 数字旋转 - 题目详情 - CZOJ。数据为民间数据。
题目描述
在电子显示屏幕上有 n 个数字,小 Y 想知道,最少需要修改 n 个数字中的几个数字,使得这 n 个数字按中心整体旋转 180 度之后,和原来一模一样。
在这个任务中,我们规定,0,1,2,5,8 这 5 个数字旋转 180 度之后和原来一模一样。6 旋转后变为 9,9 旋转后变为 6。3,4,7 这 3 个数字旋转 180 度后不能称作数字,3 变成了大写字母 E,7 变成了大写字母 L,4 旋转后变成的图案既不是数字,也不是字母。

举例来说,如果 n=3,数字为 121,旋转 180 度之后数字仍然为 121,不需要进行任何修改。如果 n=3,数字为 125,旋转 180 度之后数字为 521,和原来不一样,因此需要在原来的基础上,把 125 的第一个数字改成 5(变成 525)或者第三个数字改成 1(变成 121),旋转 180 度后才会和原来一样。
输入格式
第一行一个正整数 n。
第二行一个长度为 n 的字符串表示 n 个数字。
输出格式
一行 1 个数表示最少需要修改的数字数量是多少。
输入输出样例
输入 #1复制
3 125
输出 #1复制
1
输入 #2复制
5 61819
输出 #2复制
0
输入 #3复制
4 3473
输出 #3复制
4
说明/提示
本任务共有 6 个数据。
对于所有数据,1≤n≤105,数字包含 0,1,2,3,4,5,6,7,8,9。
| 测试点编号 | 特殊性质 |
|---|---|
| 1 | n=1 |
| 2 | 数字仅包含 3,4,7 |
| 3∼4 | n 是偶数 |
| 5∼6 | 无 |
这道题思路在翻转上,通过建立字符数组就可以快速做出
初始化:
把字符数组的每张下标转化为字符
注意:转化为翻转后的字符(3,4,7啥也不是,不算)
示例如下:
c['0'] = '0';
c['1'] = '1';
c['2'] = '2';
c['5'] = '5';
c['6'] = '9';
c['8'] = '8';
c['9'] = '6';
之后判断,完美解答(bushi)
#include<bits/stdc++.h>
using namespace std;
int cnt;
char c[256] = {0};
int main(){
c['0'] = '0';
c['1'] = '1';
c['2'] = '2';
c['5'] = '5';
c['6'] = '9';
c['8'] = '8';
c['9'] = '6';
int n;
string s;
cin >> n;
cin >> s;
for(int i = 0;i < (n + 1) / 2;i++){
int j = n - 1 - i;
if(i == j){
if(c[s[i]] == 0) cnt++;
}else{
char c1 = s[i], c2 = s[j];
if(c[c1] == 0 && c[c2] == 0) cnt += 2;
else if(c[c1] == 0 || c[c2] == 0) cnt++;
else if(c[c1] != c2 || c[c2] != c1) cnt++;
}
}
cout << cnt;
return 0;
}
禁止转载,禁止上洛谷复制,小心作弊者!!!
关注一下嘛
\(^ v ^\)~~~
**************************************************************************************************************






