原题链接:蓝桥杯算法提高VIP-计算器
解题思路:
利用map+二进制的压缩,通过异或操作写的这题,不知道怎么回事总是不通过,有没有大牛帮我看一下问题出在哪里了的?
参考代码:
#include<bits/stdc++.h>
#define hh ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
using namespace std;
typedef long long ll;
const int maxn=1005;
map<int,int> mmp;
int n;
ll ans=0;
char input[maxn]={0},output[maxn]={0};
/*
八数码管 各段小的以二进制表示
-
| |
-
| |
- (好丑啊)
分别是二进制第
0
1 2
3
4 5
6 位
以十进制表示的话就是
1
2 4
8
16 32
64
*/
void loading(){
mmp[0]=(1+2+4+16+32+64);
mmp[1]=(4+32);
mmp[2]=(1+4+8+16+64);
mmp[3]=(1+4+8+32+64);
mmp[4]=(2+4+8+32);
mmp[5]=(1+2+8+32+64);
mmp[6]=(1+2+8+16+32+64);
mmp[7]=(1+4+32);
mmp[8]=(1+2+4+8+16+32+64);
mmp[9]=(1+2+4+6+8+32+64);
}
int main(){
hh;
loading();
cin>>n>>input>>output;
for(int i=0;i<n;i++){
int t1=input[i]-'0',t2=output[i]-'0';
int cnt=mmp[t1]^mmp[t2]; //异或操作
while(cnt){
if(cnt&(1)!=0){
ans++;
}
cnt>>=1;
}
}
cout<<ans<<endl;
return 0;
}有点犯糊涂了,loading那里面写的数据一定要看仔细,否则就象我这样总是错误了....
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复