2012年第三届蓝桥杯预赛详细解题报告
2015-04-09 20:00
211 查看
假设有两种微生物 X 和 Y
X出生后每隔3分钟分裂一次(数目加倍),Y出生后每隔2分钟分裂一次(数目加倍)。
一个新出生的X,半分钟之后吃掉1个Y,并且,从此开始,每隔1分钟吃1个Y。
现在已知有新出生的 X=10, Y=89,求60分钟后Y的数目。
如果X=10,Y=90 呢?
本题的要求就是写出这两种初始条件下,60分钟后Y的数目。
题目的结果令你震惊吗?这不是简单的数字游戏!真实的生物圈有着同样脆弱的性质!也许因为你消灭的那只 Y 就是最终导致 Y 种群灭绝的最后一根稻草!
第二题很简单的暴力破解
有一群海盗(不多于20人),在船上比拼酒量。过程如下:打开一瓶酒,所有在场的人平分喝下,有几个人倒下了。再打开一瓶酒平分,又有倒下的,再次重复...... 直到开了第4瓶酒,坐着的已经所剩无几,海盗船长也在其中。当第4瓶酒平分喝下后,大家都倒下了。
等船长醒来,发现海盗船搁浅了。他在航海日志中写到:“......昨天,我正好喝了一瓶.......奉劝大家,开船不喝酒,喝酒别开船......”
请你根据这些信息,推断开始有多少人,每一轮喝下来还剩多少人。
如果有多个可能的答案,请列出所有答案,每个答案占一行。
格式是:人数,人数,...
例如,有一种可能是:20,5,4,2,0
某电视台举办了低碳生活大奖赛。题目的计分规则相当奇怪:
每位选手需要回答10个问题(其编号为1到10),越后面越有难度。答对的,当前分数翻倍;答错了则扣掉与题号相同的分数(选手必须回答问题,不回答按错误处理)。
每位选手都有一个起步的分数为10分。
某获胜选手最终得分刚好是100分,如果不让你看比赛过程,你能推断出他(她)哪个题目答对了,哪个题目答错了吗?
如果把答对的记为1,答错的记为0,则10个题目的回答情况可以用仅含有1和0的串来表示。例如:0010110011 就是可能的情况。
你的任务是算出所有可能情况。每个答案占一行。
这个程序的任务就是把一串拼音字母转换为6位数字(密码)。我们可以使用任何好记的拼音串(比如名字,王喜明,就写:wangximing)作为输入,程序输出6位数字。
变换的过程如下:
第一步. 把字符串6个一组折叠起来,比如wangximing则变为:
wangxi
ming
第二步. 把所有垂直在同一个位置的字符的ascii码值相加,得出6个数字,如上面的例子,则得出:
202 220 206 120 105
第三步. 再把每个数字“缩位”处理:就是把每个位的数字相加,得出的数字如果不是一位数字,就再缩位,直到变成一位数字为止。例如: 228 => 2+2+8=12 => 1+2=3
上面的数字缩位后变为:344836, 这就是程序最终的输出结果!
要求程序从标准输入接收数据,在标准输出上输出结果。
输入格式为:第一行是一个整数n(<100),表示下边有多少输入行,接下来是n行字符串,就是等待变换的字符串。
输出格式为:n行变换后的6位密码。
我们约定:
每个人从盒子中取出的球的数目必须是:1,3,7或者8个。
轮到某一方取球时不能弃权!
A先取球,然后双方交替取球,直到取完。
被迫拿到最后一个球的一方为负方(输方)
请编程确定出在双方都不判断失误的情况下,对于特定的初始球数,A是否能赢?
程序运行时,从标准输入获得数据,其格式如下:
先是一个整数n(n<100),表示接下来有n个整数。然后是n个整数,每个占一行(整数<10000),表示初始球数。
程序则输出n行,表示A的输赢情况(输为0,赢为1)。
X出生后每隔3分钟分裂一次(数目加倍),Y出生后每隔2分钟分裂一次(数目加倍)。
一个新出生的X,半分钟之后吃掉1个Y,并且,从此开始,每隔1分钟吃1个Y。
现在已知有新出生的 X=10, Y=89,求60分钟后Y的数目。
如果X=10,Y=90 呢?
本题的要求就是写出这两种初始条件下,60分钟后Y的数目。
题目的结果令你震惊吗?这不是简单的数字游戏!真实的生物圈有着同样脆弱的性质!也许因为你消灭的那只 Y 就是最终导致 Y 种群灭绝的最后一根稻草!
// // main.cpp // Test // // Created by JYH on 15/3/25. // Copyright (c) 2015年 JYH. All rights reserved #include<iostream> using namespace std; int main() { int x = 10, y = 90; for(int i = 1; i<=60; i++) { y -= x; if(i%2 == 0) y *= 2; if(i%3 == 0) x *= 2; } if(y<0) y=0; cout<<y<<endl; return 0; }
第二题很简单的暴力破解
// // main.cpp // Test // // Created by JYH on 15/3/25. // Copyright (c) 2015年 JYH. All rights reserved #include<iostream> using namespace std; int function1(int n) { int sum=0; while(n) { sum = sum * 10 + n%10; n /= 10; } return sum; } int main() { for(int i=12345; i<=98765; i++) { for (int k=2; k<=9; k++) { if(i * k == function1(i)) { cout<<i<<endl; break; } } } return 0; }
有一群海盗(不多于20人),在船上比拼酒量。过程如下:打开一瓶酒,所有在场的人平分喝下,有几个人倒下了。再打开一瓶酒平分,又有倒下的,再次重复...... 直到开了第4瓶酒,坐着的已经所剩无几,海盗船长也在其中。当第4瓶酒平分喝下后,大家都倒下了。
等船长醒来,发现海盗船搁浅了。他在航海日志中写到:“......昨天,我正好喝了一瓶.......奉劝大家,开船不喝酒,喝酒别开船......”
请你根据这些信息,推断开始有多少人,每一轮喝下来还剩多少人。
如果有多个可能的答案,请列出所有答案,每个答案占一行。
格式是:人数,人数,...
例如,有一种可能是:20,5,4,2,0
// // main.cpp // Test // // Created by JYH on 15/3/25. // Copyright (c) 2015年 JYH. All rights reserved #include<iostream> using namespace std; int main() { int a, b, c, d; for(a = 4; a <= 20; a++) for(b = a-1; b >= 3; b--) for(c = b-1; c>=2; c--) for(d = c-1; d>=1; d--) { if(1.0/a+1.0/b+1.0/c+1.0/d == 1.0) cout<<a<<" "<<b<<" "<<c<<" "<<d<<" "<<"0"<<endl; } return 0; }
某电视台举办了低碳生活大奖赛。题目的计分规则相当奇怪:
每位选手需要回答10个问题(其编号为1到10),越后面越有难度。答对的,当前分数翻倍;答错了则扣掉与题号相同的分数(选手必须回答问题,不回答按错误处理)。
每位选手都有一个起步的分数为10分。
某获胜选手最终得分刚好是100分,如果不让你看比赛过程,你能推断出他(她)哪个题目答对了,哪个题目答错了吗?
如果把答对的记为1,答错的记为0,则10个题目的回答情况可以用仅含有1和0的串来表示。例如:0010110011 就是可能的情况。
你的任务是算出所有可能情况。每个答案占一行。
// // main.cpp // Test // // Created by JYH on 15/3/25. // Copyright (c) 2015年 JYH. All rights reserved #include<iostream> using namespace std; void function1(char s[], int n, int score) { if(n == 0) { if(score == 10) puts(s); return ; } s[n-1] = '0'; function1(s,n-1, score+n); if (score%2 == 0) { s[n-1] = '1'; function1(s,n-1,score/2); } } int main() { char s[10]; s[10] ='\0'; function1(s,10,100); return 0; }
这个程序的任务就是把一串拼音字母转换为6位数字(密码)。我们可以使用任何好记的拼音串(比如名字,王喜明,就写:wangximing)作为输入,程序输出6位数字。
变换的过程如下:
第一步. 把字符串6个一组折叠起来,比如wangximing则变为:
wangxi
ming
第二步. 把所有垂直在同一个位置的字符的ascii码值相加,得出6个数字,如上面的例子,则得出:
202 220 206 120 105
第三步. 再把每个数字“缩位”处理:就是把每个位的数字相加,得出的数字如果不是一位数字,就再缩位,直到变成一位数字为止。例如: 228 => 2+2+8=12 => 1+2=3
上面的数字缩位后变为:344836, 这就是程序最终的输出结果!
要求程序从标准输入接收数据,在标准输出上输出结果。
输入格式为:第一行是一个整数n(<100),表示下边有多少输入行,接下来是n行字符串,就是等待变换的字符串。
输出格式为:n行变换后的6位密码。
// // main.cpp // Test // // Created by JYH on 15/3/25. // Copyright (c) 2015年 JYH. All rights reserved #include <iostream> #include <string.h> using namespace std; int main() { char str[100],n; cin>>n; while(n--) { int a[6]={0},k; cin>>str; for (k=0;k<6;k++) { for(int i=0; i<strlen(str); i++){ if(i%6 == k) a[k] += str[i]; } } for (int i=0;i<6 ; i++) { while (a[i]>10) { int temp=0; while (a[i]>0) { temp += a[i]%10; a[i] /= 10; } a[i] = temp; } } for (int j=0; j<6; j++) { cout<<a[j]; } cout<<endl; } return 0; }今盒子里有n个小球,A、B两人轮流从盒中取球,每个人都可以看到另一个人取了多少个,也可以看到盒中还剩下多少个,并且两人都很聪明,不会做出错误的判断。
我们约定:
每个人从盒子中取出的球的数目必须是:1,3,7或者8个。
轮到某一方取球时不能弃权!
A先取球,然后双方交替取球,直到取完。
被迫拿到最后一个球的一方为负方(输方)
请编程确定出在双方都不判断失误的情况下,对于特定的初始球数,A是否能赢?
程序运行时,从标准输入获得数据,其格式如下:
先是一个整数n(n<100),表示接下来有n个整数。然后是n个整数,每个占一行(整数<10000),表示初始球数。
程序则输出n行,表示A的输赢情况(输为0,赢为1)。
// // main.cpp // Test // // Created by JYH on 15/3/25. // Copyright (c) 2015年 JYH. All rights reserved #include <iostream> using namespace std; int main() { int a[100001] = {0}; int i, j, b[4]={1, 3, 7,8}; for(i=1; i<=10000; i++) { if(a[i]==0) { for(j=0;j<4;j++) { a[i+b[j]] = 1; } } } int n,ans; cin>>n; for(int k=0;k<n;k++) { cin>>ans; cout<<a[ans]<<endl; } return 0; }
相关文章推荐
- 第三届蓝桥杯C++本科B组决赛解题报告(更新中)
- 第三届蓝桥杯java本科解题报告
- 2013第四届 蓝桥杯c/c++B组预赛 解题报告(还在更新中。。。。。)
- 第三届蓝桥杯C++本科B组决赛解题报告(更新中)
- 2013第四届 蓝桥杯c/c++B组预赛 解题报告
- 第四届蓝桥杯C++本科B组预赛解题报告
- 2014年蓝桥杯预赛 C/C++本科B组 解题报告 (本人写的)
- 2014年蓝桥杯预赛 C/C++本科A组 解题报告 史丰收速算
- 2014年第五届蓝桥杯预赛 C/C++本科B组 快速解题思路及报告(完整版,4.9修订)
- 2014年蓝桥杯预赛 C/C++本科B组 解题报告 史丰收速算
- 第四届【蓝桥杯】预赛解题报告
- 2014年蓝桥杯预赛 C/C++本科B组 解题报告 打印图形
- 第四届蓝桥杯C++本科B组预赛解题报告
- 2012年第三届蓝桥杯(C/C++)预赛题目及个人答案(欢迎指正)
- 2014蓝桥杯本科C/C++组预赛第9题<斐波那契>解题报告
- 2014 第五届蓝桥杯预赛c/c++本科B组 解题报告
- 2013蓝桥杯预赛C/C++本科B组解题报告
- 2012年第三届蓝桥杯全国软件大赛c++预赛 题目及参考答案
- 运行时间排列第四届蓝桥杯C++本科B组解题报告
- UVa第五章STL应用 习题((解题报告))详细!