B4389题解(小学生发,简单好理解)

题目背景

搬运自 [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。

测试点编号特殊性质
1n=1
2数字仅包含 3,4,7
3∼4n 是偶数
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 ^\)~~~

 **************************************************************************************************************

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值