当前位置:首页 >> 学科竞赛 >>

2012蓝桥杯试题解答


2012 蓝桥杯试题解答
编译环境:dev c++

3.古堡算式
福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式: ABCDE * ? = EDCBA 他对华生说: “ABCDE 应该代表不同的数字,问号也代表某个数字! ” 华生: “我猜也是! ” 于是,两人沉默了好久,还是没有算出合适的结果来。 请你利用计算机的优势,找到破解的答案

。 把 ABCDE 所代表的数字写出来。 #include<iostream> #define max 100000 using namespace std; int judge(int n,int m){ int num[5],i,j,p=n; i=0; while(p) { num[i++]=p%10; p/=10; } for(i=0;i<4;i++) for(j=i+1;j<5;++j) if(num[i]==num[j]) return 0; p=n*m; if(p/max) return 0; i=4; while(p) { if(p%10!=num[i--])return 0; p/=10; } return 1; } int main()

{ int i,j; for(i=10000;i<max;++i) for(j=2;j<10;j++) if(judge(i,j)) cout<<i<<endl; getchar();getchar(); return 0; }

4. 巧排扑克牌
小明刚上小学,学会了第一个扑克牌“魔术” ,到处给人表演。魔术的内容是这样的: 他手里握着一叠扑克牌:A,2,....J,Q,K 一共 13 张。他先自己精心设计它们的顺序, 然后正面朝下拿着,开始表演。 只见他先从最下面拿一张放到最上面,再从最下面拿一张翻开放桌子上,是 A;然后再 从最下面拿一张放到最上面,再从最下面拿一张翻开放桌子上,是 2;......如此循环直到手 中只有一张牌,翻开放桌子上,刚好是 K。 这时,桌上牌的顺序是:A,2,3,4,5,6,7,8,9,10,J,Q,K 请你计算一下,小明最开始的时候手里牌的顺序是怎样的。 把结果写出来,逗号分割,小明“魔术”开始时,最下面的那张牌输出为第一个数据。 //第四题 巧排扑克牌 #include<iostream> using namespace std; int operate(char *seq,char card,int len) { if(len==0) { seq[0]=card; return 1; } int i; seq[len]=card; card=seq[0]; for(i=0;i<len;++i) seq[i]=seq[i+1]; seq[len]=card; len++; seq[len]='/0'; return len; } int print(char *s,int len)

{ int i; for(i=0;i<len;++i) { if(s[i]=='T'){cout<<10<<' ';continue;} cout<<s[i]<<' '; } cout<<endl; return 0; } int main() { char seq[15]="KQJT98765432A",result[15]; int i; for(i=0;i<13;++i) operate(result,seq[i],i); print(result,13); getchar();getchar(); return 0; }

8. 手机尾号
30 年的改革开放,给中国带来了翻天覆地的变化。2011 全年中国手机产量约为 11.72 亿部。手机已经成为百姓的基本日用品! 给手机选个好听又好记的号码可能是许多人的心愿。 但号源有限, 只能辅以有偿选号的 方法了。 这个程序的目的就是:根据给定的手机尾号(4 位) ,按照一定的规则来打分。其规则 如下: 1. 如果出现连号,不管升序还是降序,都加 5 分。例如:5678,4321 都满足加分标准。 2. 前三个数字相同,或后三个数字相同,都加 3 分。例如:4888,6665,7777 都满足加 分的标准。注意:7777 因为满足这条标准两次,所以这条规则给它加了 6 分。 3. 符合 AABB 或者 ABAB 模式的加 1 分。例如:2255,3939,7777 都符合这个模式,所以 都被加分。注意:7777 因为满足这条标准两次,所以这条标准给它加了 2 分。 4. 含有:6,8,9 中任何一个数字,每出现一次加 1 分。例如 4326,6875,9918 都符合 加分标准。其中,6875 被加 2 分;9918 被加 3 分。 尾号最终得分就是每条标准的加分总和! 要求程序从标准输入接收数据,在标准输出上输出结果。 输入格式为:第一行是一个整数 n(<100) ,表示下边有多少输入行,接下来是 n 行 4 位一组的数据,就是等待计算加分的手机尾号。

输出格式为:n 行整数。 例如,输入: 14 3045 0211 2345 6543 7777 8888 7878 7788 6688 2424 2244 9918 6789 8866 则输出: 0 0 5 6 8 12 3 3 5 1 1 3 8 5

#include<fstream> #include<iostream> using namespace std; int rule1(char *num) { int i; for(i=0;i<3;++i) if((int)(num[i+1]-num[i])!=1)break;

if(i==3) return 5; for(i=0;i<3;++i) if((int)(num[i]-num[i+1])!=1)break; if(i==3) return 5; return 0; } int rule2(char *num) { int score=0; int i; for(i=0;i<2;++i) if(num[i]!=num[i+1]) break; if(i==2) score+=3; for(i=1;i<3;++i) if(num[i]!=num[i+1]) break; if(i==3) score+=3; return score; } int rule3(char *num) { int score=0; if(num[0]==num[1]&&num[2]==num[3])score++; if(num[0]==num[2]&&num[1]==num[3])score++; return score; } int rule4(char *num) { int i; int score=0; for(i=0;i<4;++i) if(num[i]=='6'||num[i]=='8'||num[i]=='9')score++; return score; } int main() { //ifstream cin("手机号码.txt"); int n,i,score; char num[6]; loop: cin>>n; if(n==0) return 0; for(i=0;i<n;++i) { cin>>num;

//score=0; cout<<rule1(num)+rule2(num)+rule3(num)+rule4(num)<<endl; //cout<<score<<endl; } //getchar(); goto loop; //getchar();getchar(); //fflush(stdin); return 0; }

9. 罗马数字
古罗马帝国开创了辉煌的人类文明, 但他们的数字表示法的确有些繁琐, 尤其在表示大 数的时候,现在看起来简直不能忍受,所以在现代很少使用了。之所以这样,不是因为发明 表示法的人的智力的问题, 而是因为一个宗教的原因, 当时的宗教禁止在数字中出现 0 的概 念! 罗马数字的表示主要依赖以下几个基本符号: I 1 V 5 X 10 L 50 C 100 D 500 M 1000 这里,我们只介绍一下 1000 以内的数字的表示法。 单个符号重复多少次,就表示多少倍。最多重复 3 次。比如:CCC 表示 300 XX 表示 20,但 150 并不用 LLL 表示,这个规则仅适用于 I X C M。 如果相邻级别的大单位在右,小单位在左,表示大单位中扣除小单位。比如:IX 表示 9 IV 表示 4 XL 表示 40 更多的示例参见下表,你找到规律了吗?

I,1 II,2 III,3 IV,4 V,5 VI,6 VII,7 VIII,8 IX,9 X,10

XI,11 XII,12 XIII,13 XIV,14 XV,15 XVI,16 XVII,17 XVIII,18 XIX,19 XX,20 XXI,21 XXII,22 XXIX,29 XXX,30 XXXIV,34 XXXV,35 XXXIX,39 XL,40 L,50 LI,51 LV,55 LX,60 LXV,65 LXXX,80 XC,90 XCIII,93 XCV,95 XCVIII,98 XCIX,99 C,100 CC,200 CCC,300 CD,400 D,500 DC,600 DCC,700 DCCC,800 CM,900 CMXCIX,999 本题目的要求是:请编写程序,由用户输入若干个罗马数字串,程序输出对应的十进制 表示。 输入格式是:第一行是整数 n,表示接下来有 n 个罗马数字(n<100)。以后每行一个罗马 数字。罗马数字大小不超过 999。

要求程序输出 n 行,就是罗马数字对应的十进制数据。 例如,用户输入: 3 LXXX XCIII DCCII 则程序应该输出: 80 93 702 //第九题 罗马数字 //#include<fstream> #include<iostream> #include<string> using namespace std; int RomeNum(char r) { char Rome[10]="IVXLCDM"; int i; for(i=0;i<7;++i) if(r==Rome[i]) return i; return i; } int main() { //ifstream cin("Rom.txt"); char Rom[20]; int value[7]={1,5,10,50,100,500,1000},sum,Rno[7]; int n,i,len; cin>>n; while(n--) { cin>>Rom; len=strlen(Rom); sum=0; for(i=0;i<len;++i) Rno[i]=RomeNum(Rom[i]); for(i=0;i<len;++i) { sum+=value[Rno[i]]; if(i<len-1&&Rno[i]==Rno[i+1]) { sum+=value[Rno[i++]];

if(i<len-1&&Rno[i]==Rno[i+1]) sum+=value[Rno[i++]]; } if(i>0&&Rno[i-1]<Rno[i]) sum-=2*value[Rno[i-1]]; } cout<<sum<<endl; } //getchar();getchar(); return 0; }


相关文章:
2012蓝桥杯试题解答
2012 蓝桥杯试题解答编译环境:dev c++ 3.古堡算式福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式: ABCDE * ? = EDCBA 他对华生说: “ABCDE 应该代表不同...
2012蓝桥杯初赛试题
2012 蓝桥杯初赛试题(C 本科组) 作者: AC521 日期: 2012 年 4 月 8 日 发表评论 (14) 查看评论 试题+总结 试题解析: 第一题:微生物增殖 假设有两种微...
2012蓝桥杯初赛试题
2012 蓝桥杯初赛试题(本科组) 第一题:微生物增殖 假设有两种微生物 X 和 Y X 出生后每隔 3 分钟分裂一次 (数目加倍) Y 出生后每隔 2 分钟分裂一次 , (数...
蓝桥杯2012 竞赛真题
蓝桥杯2012 竞赛真题_学科竞赛_小学教育_教育专区。1. 微生物增殖 假设有两种...在同一个文件中,调试好后,存入与【考生文件夹】下对应题号的“解答.txt”中...
2012蓝桥杯决赛试题
2012蓝桥杯决赛试题_IT认证_资格考试/认证_教育专区。1、 【结果填空】 (满分...答案不要写在这里,写在“解答.txt”中 2、 【代码填空】(满分 16 分) 某...
2011-2014蓝桥杯预赛递归算法题目及部分答案
2011-2014蓝桥杯预赛递归算法题目及部分答案_学科竞赛_小学教育_教育专区。2014 ...2012 预赛 4: 某电视台举办了低碳生活大奖赛。题目的计分规则相当奇怪: 每位...
2012蓝桥杯初赛试题
2012蓝桥杯初赛试题(C 本科组) 作者: AC521 日期: 2012 年 4 月 8 日发表评论 (14)查看评论 试题+总结 试题解析: 第一题:微生物增殖 假设有两种微生物 ...
2011到2013蓝桥杯决赛题
2012 年暑假蓝桥杯决赛题附答案 【结果填空】 (满分 5 分) 1949 年的国庆节(10 月 1 日)是星期六。 今年(2012)的国庆节是星期一。 那么,从建国到现在,...
蓝桥杯java历年真题及答案整理(共129道题目及答案)
蓝桥杯java历年真题答案整理(共129道题目答案)_其它_高等教育_教育专区。...(i%2012==0&&i%3==0&&i%12==0)){ continue; } if(month!=6){ ...
2012蓝桥杯高职C试题及部分参考答案
2012蓝桥杯高职C试题及部分上机的参考答案,可能有的地方语法有误,但思想是对的2012蓝桥杯高职C试题及部分上机的参考答案,可能有的地方语法有误,但思想是对的隐藏>...
更多相关标签:
蓝桥杯c语言试题 | 蓝桥杯java试题 | 蓝桥杯单片机历届试题 | 蓝桥杯试题 | 2015蓝桥杯c语言试题 | 蓝桥杯c 试题 | 蓝桥杯java试题c组 | 蓝桥杯嵌入式试题 |