原题链接:蓝桥杯算法提高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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复