2017年蓝桥杯省赛赛前集训题(共14题)
蓝桥杯练习系统题目汇总(K12教育文档)

(完整word版)蓝桥杯练习系统题目汇总(word版可编辑修改)编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望((完整word版)蓝桥杯练习系统题目汇总(word版可编辑修改))的内容能够给您的工作和学习带来便利。
同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。
本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为(完整word版)蓝桥杯练习系统题目汇总(word版可编辑修改)的全部内容。
蓝桥杯练习系统题目汇总:入门训练1. Fibonacci数列问题描述Fibonacci数列的递推公式为:F n=F n—1+F n-2,其中F1=F2=1.当n比较大时,F n也非常大,现在我们想知道,F n除以10007的余数是多少。
输入格式输入包含一个整数n。
输出格式输出一行,包含一个整数,表示F n除以10007的余数.说明:在本题中,答案是要求F n除以10007的余数,因此我们只要能算出这个余数即可,而不需要先计算出F n的准确值,再将计算的结果除以10007取余数,直接计算余数往往比先算出原数再取余简单.样例输入10样例输出55样例输入22样例输出7704数据规模与约定1 〈= n 〈= 1,000,000。
参考代码:c++1.#include〈stdlib.h〉2.#include<stdio。
h>3.#define MOD 100074.#define MAXN 10000015.int n,i, F[MAXN];6.int main()7.{8.scanf(”%d",&n);9.F[1]= 1;10.F[2]= 1;11.for(i = 3;i <= n;++i)12.F[i]= (F[i-1] + F[i-2])%MOD;13.printf(”%d\n”,F[n]);14.return0;15.}java:1.import java。
第六届蓝桥杯程序设计大赛题目及答案

第六届省赛1.方程整数解方程: a^2 + b^2 + c^2 = 1000(或参见【图1.jpg】)这个方程有整数解吗?有:a,b,c=6,8,30 就是一组解。
你能算出另一组合适的解吗?请填写该解中最小的数字。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
10#include<stdio.h>int main(){int a,b,c;for(a=1;a*a<=1000;a++){for(b=1;b*b<=1000;b++){for(c=1;c*c<=1000;c++){if(a*a+b*b+c*c==1000){printf("%d %d %d\n",a,b,c);}}}}return 0;}2.星系炸弹在X星系的广袤空间中漂浮着许多X星人造“炸弹”,用来作为宇宙中的路标。
每个炸弹都可以设定多少天之后爆炸。
比如:阿尔法炸弹2015年1月1日放置,定时为15天,则它在2015年1月16日爆炸。
有一个贝塔炸弹,2014年11月9日放置,定时为1000天,请你计算它爆炸的准确日期。
请填写该日期,格式为 yyyy-mm-dd 即4位年份2位月份2位日期。
比如:2015-02-19 请严格按照格式书写。
不能出现其它文字或符号。
2017-08-05#include <stdio.h>int main(){int monthDays[12]={31,28,31,30,31,30,31,31,30,31,30,31};int days=1000;int year=2014, month=11, day=9;int i;for(i=0;i<days;i++){day++;if(day>monthDays[month-1]){day=1;month++;if(month>12){month=1;year++;if((year%400==0) ||(year%4==0 && year%100!=0))monthDays[1]=29;elsemonthDays[1]=28;}}}printf("%d-%d-%d\n",year,month,day);getchar();return 0;}3.奇妙的数字小明发现了一个奇妙的数字。
数据结构竞赛题目集锦

数据结构竞赛题目集锦1.发现环(题目来源:2017蓝桥杯决赛)问题描述小明的实验室有N台电脑,编号1~N。
原本这N台电脑之间有N-1条数据链接相连,恰好构成一个树形网络。
在树形网络上,任意两台电脑之间有唯一的路径相连。
不过在最近一次维护网络时,管理员误操作使得某两台电脑之间增加了一条数据链接,于是网络中出现了环路。
环路上的电脑由于两两之间不再是只有一条路径,使得这些电脑上的数据传输出现了BUG。
为了恢复正常传输。
小明需要找到所有在环路上的电脑,你能帮助他吗?输入格式第一行包含一个整数N。
以下N行每行两个整数a和b,表示a和b之间有一条数据链接相连。
对于30%的数据,1 <= N <= 1000对于100%的数据, 1 <= N <= 100000, 1 <= a, b <= N输入保证合法。
输出格式按从小到大的顺序输出在环路上的电脑的编号,中间由一个空格分隔。
样例输入51 23 12 42 55 3样例输出1 2 3 52.小朋友排队(题目来源:第五届蓝桥杯预赛 C/C++本科B组)问题描述n 个小朋友站成一排。
现在要把他们按身高从低到高的顺序排列,但是每次只能交换位置相邻的两个小朋友。
每个小朋友都有一个不高兴的程度。
开始的时候,所有小朋友的不高兴程度都是0。
如果某个小朋友第一次被要求交换,则他的不高兴程度增加1,如果第二次要求他交换,则他的不高兴程度增加2(即不高兴程度为3),依次类推。
当要求某个小朋友第k次交换时,他的不高兴程度增加k。
请问,要让所有小朋友按从低到高排队,他们的不高兴程度之和最小是多少。
如果有两个小朋友身高一样,则他们谁站在谁前面是没有关系的。
输入格式输入的第一行包含一个整数n,表示小朋友的个数。
第二行包含 n 个整数H1 H2 … Hn,分别表示每个小朋友的身高。
输出格式输出一行,包含一个整数,表示小朋友的不高兴程度和的最小值。
样例输入 3 3 2 1 样例输出 93. 剪邮票(题目来源:2016年蓝桥杯) 问题描述如图1所示, 有12张连在一起的12生肖的邮票。
蓝桥杯Python集训课复习题一

蓝桥杯Python集训课复习题一选择题您的姓名: [填空题] *_________________________________1.从火星上看太阳运行轨迹呈什么形状?() [单选题] *A.“8”字形B.圆形C.泪珠形(正确答案)2. 2013年9月,英国科学家在南极冰下湖的泥浆里发现了哪种类型的生命迹象?() [单选题] *A.距今10万年的嗜极生物(正确答案)B. 距今12万年的嗜极生物C. 距今15万年的嗜极生物3.以下哪种动物和猛犸象的遗传基因最相似?() [单选题] *A. 亚洲象B.非洲象(正确答案)C.美洲象4.下列选项中,哪个地方最适合猛犸象生存?() [单选题] *A.西伯利亚(正确答案)B.阿拉斯加C.非洲荒野5.硼砂的一般形态是什么?() [单选题] *A.白色晶体的粉末(正确答案)B.白色晶体的小颗粒C.蓝色晶体的粉末6.捕蝇草的绝杀武器是什么?() [单选题] *A.叶面上的腺毛B. 叶片内的绒毛(正确答案)C. 颈部的囊7.木卫二的主体结构是什么?() [单选题] *A.碳酸钙岩石B.铝硅酸盐岩石C.硅酸盐岩石(正确答案)8.软泥放在哪里会很快变干发硬?() [单选题] *A.空气中(正确答案)B.密闭的玻璃容器中C.水中9.人的大脑通过什么保持时间感?() [单选题] *A.数自己的心跳(正确答案)B.数自己的脉搏C.无法保持10.蚊子依据什么寻找吸血目标?() [单选题] *A.人的体温B.人的血型C.二氧化碳.挥发性化学物质(正确答案)11.体型无比巨大的迷惑龙通常在开阔地区活动,那迷惑龙妈妈会在哪里筑巢产卵?() [单选题] *A.丛林(正确答案)B.平原C.沙漠12.以下哪种是萨米人的主要牲畜?() [单选题] *A.麋鹿B.驯鹿(正确答案)C.驼鹿13.小盗龙有几个翅膀?() [单选题] *A.没有B.2个C.4个(正确答案)14.海獭为什么揉脸?() [单选题] *A.无意识的动作B.清洁(正确答案)C.卖萌15.考拉的主要食物是:() [单选题] *A.橡树叶子B.榕树叶子C.桉树叶子(正确答案)16.鸟和蛋谁先出现的?() [单选题] *A.鸟B.蛋(正确答案)C.一起出现的17.驯鹿的迁徙信号由谁发起?() [单选题] *A.雄鹿B.雌鹿(正确答案)C.任何一只都行18.飞出太阳系的“旅行号”宇宙探测器是主要靠什么加速的?() [单选题] *A.天体的引力(正确答案)B.发射火箭的助推C.自身的推进器19.天王星表面那梦幻般的蓝色其来源是:() [单选题] *A.水B.液态氨C.甲烷(正确答案)20.热气球借助什么飘起来?() [单选题] *A.空气(正确答案)B.氦气C.氢气21.破冰船的破冰方式不包括?() [单选题] *A.连续式破冰法B.冲撞式破冰法C.摩擦式破冰法(正确答案)22.下列关于仙女座星系和银河系之间的关系的叙述,正确的是?() [单选题] *A.仙女座星系在绕着银河系以25000千米/小时的速度做圆周运动。
(完整word版)蓝桥杯集训讲题

一、选择题(单选题,每空50 分)第一题(难度系数 1)以下哪个程序可以实现:在 EV3 主机屏幕上显示“Hello!"字样,并保持 5 秒钟后结束程序?A:A错误的原因,我们知道如果选用循环模块,循环的内容必须是要放在循环模块的内部,才可以B:B错误的原因,显示模块的程序在显示屏上显示可能只需要几毫秒,但是我们人的眼睛是看不见,因为图像的信息,在眼睛里停留的时间特别短,程序可以运行但是我们看不见.C:C错误的原因和B相似,只循环五次,时间依旧很短,人眼无法看见D:以下是显示模块的具体介绍,请小朋友们仔细观看第二题(难度系数 3)以下哪个程序可以实现:“将颜色传感器测量的反射光强度数值实时显示在 EV3 主机屏幕上”?A:B:题目要求是实时监测,这里是当小于50的情况与题目不符C:这里用了颜色传感器的“颜色”模式,不是“反射光线强度”模式D:以上程序均不能。
颜色传感器可以检测进入传感器正面小窗口的光线的颜色或强度。
颜色传感器可以在三种不同模式下使用:“颜色”模式、“反射光线强度”模式和“环境光强度"模式“反射光线强度"模式在“反射光线强度”模式中,颜色传感器会检测进入传感器的光线的强度。
光线的强度测量为从 0 至 100 的百分比,其中 0 表示非常暗,100 表示非常亮。
当颜色传感器处于“反射光线强度”模式时,传感器正面的红色 LED 指示灯会开启。
如果传感器接近于物体或表面,则此红色光线会从物体上反射,然后进入要检测的传感器。
可以使用此方法测量表面或物体上的颜色阴影,因为较暗颜色阴影会将较少红色光线反射回传感器。
“环境光强度”模式在“环境光强度”模式中,与“反射光线强度"模式一样,颜色传感器会检测进入传感器的光线的强度.光线的强度测量为从0 至 100 的百分比,其中 0 表示非常暗,100 表示非常亮。
在“环境光强度"模式中,传感器正面的蓝色 LED 指示灯会微弱开启。
蓝桥杯VIP试题以及答案解析

//首先声明这并不是本人原创,只不不过本人想总结出来方便大家,全为C++代码。
1.结点选择问题描述有一棵 n 个节点的树,树上每个节点都有一个正整数权值。
如果一个点被选择了,那么在树上和它相邻的点都不能被选择。
求选出的点的权值和最大是多少?解题思路:这题模型是树形动态规划入门题目,dp[i][0]表示该节点不被选择,dp[i][1]表示该结点被选择。
转移方程为:dp[u][1]+=dp[v][0];//选择了u结点,则与它邻接的结点不选;dp[u][0]+=max(dp[v][0],dp[v][1]);不选择u结点,则与它邻接的结点选择结果最大的;应该特别注意:该题结点数量较大,应该选用邻接表存储边的关系1.#include<cstdio>2.#include<cstring>3.#define max(a,b) ((a)>(b)?(a):(b))4.#define maxn 1000105.bool vis[maxn];6.int dp[maxn][2];7.int father[maxn];8.int head[maxn];9.int n;10.int cnt;11.struct Edge12.{13.int to,next;14.}edge[2*maxn];15.void add(int u,int v)16.{17. edge[cnt].to=v;18. edge[cnt].next=head[u];19. head[u]=cnt++;20.}21.void treedp(int u)22.{23. vis[u]=1;24.for(int i=head[u];i!=-1;i=edge[i].next)25. {26.int v=edge[i].to;27.if(!vis[v])28. {29. treedp(v);30. dp[u][1]+=dp[v][0];31. dp[u][0]+=max(dp[v][1],dp[v][0]);32. }33. }34.}35.void init()36.{37. cnt=0;38. memset(dp,0,sizeof(dp));39. memset(father,0,sizeof(father));40. memset(vis,0,sizeof(vis));41. memset(head,-1,sizeof(head));42.}43.int main()44.{45. init();46. scanf("%d",&n);47.for(int i=1;i<=n;i++)48. scanf("%d",&dp[i][1]);49.int root=0;50.int begin=1;51.for(int i=0;i<n-1;i++)52. {53.int a,b;54. scanf("%d%d",&a,&b);55. add(a,b);56. add(b,a);57. father[b]=a;58.if(root==b||begin)59. {60. root=a;61. }62. }63.64.while(father[root])65. root=father[root];66. treedp(root);67.int ans;68. ans=max(dp[root][0],dp[root][1]);69. printf("%d\n",ans);70.}2.K好数问题描述如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数。
java蓝桥杯历年真题及答案整理(小结)

java蓝桥杯历年真题及答案整理(⼩结)蓝桥杯java历年真题及答案整理(闭关⼀个⽉,呕⼼沥⾎整理出来的)1 全排列是这样的,如果给定N个不同字符,将这N个字符全排列,最终的结果将会是N!种。
如:给定 A、B、C三个不同的字符,则结果为:ABC、ACB、BAC、BCA、CAB、CBA⼀共3!=3*2=6种情况。
package Question1_9;import java.util.Scanner;import java.util.Vector;public class Question1 {public static long count=0;private void fullPermutation(Vector<Character>sourse, Vector<Character> result) {if(sourse.size()==0){for (int i = 0; i < result.size(); i++) {System.out.print(result.elementAt(i));}System.out.print("\n");count++;return;}for (int i = 0; i < sourse.size(); i++) {Vector<Character>tsourse=new Vector<Character>(sourse);Vector<Character>tresult=new Vector<Character>(result);tresult.add(sourse.elementAt(i));tsourse.remove(i);new Question1().fullPermutation(tsourse, tresult);}}public static void main(String[] args) {Scanner scanner=new Scanner(System.in);int n=scanner.nextInt();Vector<Character> sourse=new Vector<Character>();Vector<Character> result=new Vector<Character>();for (int i = 0; i < n; i++) {sourse.add((char)('A'+i));}new Question1().fullPermutation(sourse, result);System.out.println(Question1.count);}}2串的简单处理串的处理在实际的开发⼯作中,对字符串的处理是最常见的编程任务。
蓝桥杯历年真题你刷了吗?过来人教你逆袭!

蓝桥杯历年真题你刷了吗?过来⼈教你逆袭!蓝桥杯报名已经开始,你做好准备了吗?在参赛报名前,⼀定要做好充⾜的准备,除了学习算法等基础知识外,还要学会实战。
今天,我带来2017年蓝桥杯省赛真题,欢迎⼤家⼀起来做刷题哦~单独戳我或移步⼯粽号:蓝桥云课,即可免费得蓝桥杯真题库!(PS:千万别只看不思考不敲代码!)01 蓝桥杯省赛真题本题为填空题,只需要算出结果后,在代码中使⽤输出语句将所填结果输出即可。
X 星球的⼀处迷宫游乐场建在某个⼩⼭坡上。
它是由 10x10 相互连通的⼩房间组成的。
房间的地板上写着⼀个很⼤的字母。
我们假设玩家是⾯朝上坡的⽅向站⽴,则:L 表⽰⾛到左边的房间;R 表⽰⾛到右边的房间;U 表⽰⾛到上坡⽅向的房间;D 表⽰⾛到下坡⽅向的房间。
X星球的居民有点懒,不愿意费⼒思考。
他们更喜欢玩运⽓类的游戏。
这个游戏也是如此!开始的时候,直升机把 100 名玩家放⼊⼀个个⼩房间内。
玩家⼀定要按照地上的字母移动。
迷宫地图如下:UDDLUULRULUURLLLRRRURRUURLDLRDRUDDDDUUUUURUDLLRRUUDURLRLDLRLULLURLLRDURDLULLRDDDUUDDUDUDLLULRDLUURRR请你计算⼀下,最后,有多少玩家会⾛出迷宫? ⽽不是在⾥边兜圈⼦。
如果你还没明⽩游戏规则,可以参看下⾯⼀个简化的 4x4 迷宫的解说图:02 解题思路(1)投机取巧式根据“考⽣须知”,这题是填空题,只交答案就⾏了。
如果不想编码,直接⽤⼿⼀个个去数那 100 个点,⼏分钟就数完了,答案是 31,⽐编码还要快。
(2) DFS 编码⼀道搜索题,可以选择 dfs,代码简短。
#include <iostream>using namespace std;#include<vector>#include<string>using namespace std;int ans;vector<vector<char>>s={{'U','D','D','L','U','U','L','R','U','L'},{'U','U','R','L','L','L','R','R','R','U'},{'R','R','U','U','R','L','D','L','R','D'},{'R','U','D','D','D','D','U','U','U','U'},{'U','R','U','D','L','L','R','R','U','U'},{'D','U','R','L','R','L','D','L','R','L'},{'U','L','L','U','R','L','L','R','D','U'},{'R','D','L','U','L','L','R','D','D','D'},{'U','U','D','D','U','D','U','D','L','L'},{'U','L','R','D','L','U','U','R','R','R'}};bool vis[100][100];void dfs(int x,int y){if(vis[x][y] == true)return;if(x<0||y<0||x>=s.size() || y>=s[x].size()){ans++;return;}switch (s[x][y]){case 'U':vis[x][y]= true;dfs(x-1,y);vis[x][y]= false;break;case 'L':vis[x][y]= true;dfs(x,y-1);vis[x][y]= false;break;case 'R':vis[x][y]= true;dfs(x,y+1);vis[x][y]= false;break;case 'D':vis[x][y]= true;dfs(x+1,y);vis[x][y]= false;break;default:return;}}void has_Path(){for(int i=0;i<s.size();++i)for(int j=0;j<s[i].size();++j)dfs(i,j);}int main(){has_Path();cout<<ans;}今天的蓝桥杯真题刷题就到这⾥了,后续我也会不定期更新蓝桥杯真题讲解。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第1题:星系炸弹(2015年省赛C/C++B组第2题)在X星系的广袤空间中漂浮着许多X星人造“炸弹”,用来作为宇宙中的路标。
每个炸弹都可以设定多少天之后爆炸。
比如:阿尔法炸弹2015年1月1日放置,定时为15天,则它在2015年1月16日爆炸。
有一个贝塔炸弹,2014年11月9日放置,定时为1000天,请你计算它爆炸的准确日期。
请填写该日期,格式为yyyy-mm-dd 即4位年份2位月份2位日期。
比如:2015-02-19请严格按照格式书写。
不能出现其它文字或符号。
•结果:2017-08-05•解决方法:用Excel拖这个题会了的同学们把上课讲过的,课件上的,其他几道Excel拖动题都做一遍。
第2题:(2015年校内选拔赛C/C++B组第3题)如果x的x次幂结果为10(参见【图1.png】),你能计算出x的近似值吗?显然,这个值是介于2和3之间的一个数字。
请把x的值计算到小数后6位(四舍五入),并填写这个小数值。
注意:只填写一个小数,不要写任何多余的符号或说明。
#include <iostream>#include <cmath>#include <iomanip>using namespace std;int main(){double x;for(x=2;x<=3;x+=1e-7){if (abs(pow(x,x)-10)<1e-6)cout<<fixed<<setprecision(6)<<x;}return 0;}答案:2.506184其他类似题:ALGO-23一元三次方程求解第3题(全排列)注意:全排列必考!全排列必考!全排列必考!重要的事要说三遍!李白打酒(2014年省赛本科B组第3题)话说大诗人李白,一生好饮。
幸好他从不开车。
一天,他提着酒壶,从家里出来,酒壶中有酒2斗。
他边走边唱:无事街上走,提壶去打酒。
逢店加一倍,遇花喝一斗。
这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了。
请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b。
则:babaabbabbabbbb 就是合理的次序。
像这样的答案一共有多少呢?请你计算出所有可能方案的个数(包含题目给出的)。
答案:14解法1:next_permutation的解法#include<iostream>#include<algorithm>using namespace std;int main(){int p[15]={1,1,1,1,1,2,2,2,2,2,2,2,2,2,2};//1是店,2是花int sum,cnt=0;do{sum=2;for(int i=0;i<15;i++)if(p[i]==1)sum<<=1;else if(p[i]==2)sum--;if(sum==0) cnt++;}while(next_permutation(p,p+14));//因为最后一次遇到的肯定是花,所以只排前14个数,不排最后一个cout<<cnt;return 0;}解法2:交换大法解法#include <iostream>using namespace std;#define N 14//因为最后一次肯定是花,所以只排14个数int cnt;bool ok(int p[],int begin,int end){for (int i = begin; i < end; i++)if (p[i] == p[end])return false;return true;}void perms(int p[],int start){int i;if(start==N-1){int sum=2;for(i=0;i<N;i++)if(p[i]==1)sum<<=1;else if(p[i]==2)sum--;if(sum==1) cnt++;//倒数第2次,剩1斗酒return;}for(i=start;i<N;i++){if (ok(p, start, i)){swap(p[start],p[i]);perms(p,start+1);swap(p[start],p[i]);}}}int main(){int p[]={1,1,1,1,1,2,2,2,2,2,2,2,2,2};//1是店,2是花perms(p,0);cout<<cnt;return 0;}解法3:字符串全排列的解法#include<iostream>#include<algorithm>using namespace std;int main(){string s = "aaaaabbbbbbbbb";//a是店,b是花int sum,cnt=0;do{sum=2;for(int i=0;i<15;i++)if(s[i]=='a')sum<<=1;else if(s[i]=='b')sum--;if(sum==1) cnt++;}while(next_permutation(s.begin(),s.end()));cout<<cnt;return 0;}解法4:递归解法#include<iostream>using namespace std;int cnt=0;void f(int a,int b,int c)//a个店,b朵花,c升酒{if(a>5||b>9) return;f(a+1,b,c*2);f(a,b+1,c-1);if(a==5&&b==9&&c==1)cnt++;}int main(){f(0,0,2);cout<<cnt<<endl;}第4题(逻辑推理题)练习系统ADV-143 扶老奶奶过街•一共有5个红领巾,编号分别为A、B、C、D、E,老奶奶被他们其中一个扶过了马路。
五个红领巾各自说话:A :我和E都没有扶老奶奶B :老奶奶是被C和E其中一个扶过大街的C :老奶奶是被我和D其中一个扶过大街的D :B和C都没有扶老奶奶过街E :我没有扶老奶奶已知五个红领巾中有且只有2个人说的是真话,请问是谁扶这老奶奶过了街?若有多个答案,在一行中输出,编号之间用空格隔开例如A B C D E(这显然不是正确答案)解法1--位运算#include <iostream>using namespace std;#define N 5int main(){int i,j,t,a[N];for (i = 0x10; i >0; i>>=1){t=i;for (j = N-1; j >= 0; j--){a[j] = t & 1;t>>=1;}//ABCDE5个变量存5个人的真假话状态,1为真话,0为假话int A=(a[0]+a[4]==0);//A :我和E都没有扶老奶奶int B=(a[2]+a[4]==1);//B :老奶奶是被C和E其中一个扶过大街的int C=(a[2]+a[3]==1);//C :老奶奶是被我和D其中一个扶过大街的int D=(a[1]+a[2]==0);//D :B和C都没有扶老奶奶过街int E=(a[4]==0);//E :我没有扶老奶奶if(A+B+C+D+E==2)//5个人有且只有2个人说的是真话{for (j = 0; j < N; j++){if(a[j]) cout<<char('A'+j)<<' ';}}}return 0;}解法2-全排列#include<iostream>#include<algorithm>using namespace std;#define N 5int main(){int a[N]={1,0,0,0,0};//1扶了。
0没扶。
do{//ABCDE5个变量存5个人的真假话状态,1为真话,0为假话int A=(a[0]+a[4]==0);//A :我和E都没有扶老奶奶int B=(a[2]+a[4]==1);//B :老奶奶是被C和E其中一个扶过大街的int C=(a[2]+a[3]==1);//C :老奶奶是被我和D其中一个扶过大街的int D=(a[1]+a[2]==0);//D :B和C都没有扶老奶奶过街int E=(a[4]==0);//E :我没有扶老奶奶if(A+B+C+D+E==2)//5个人有且只有2个人说的是真话{for (int i = 0; i < N; i++){if(a[i]) cout<<char('A'+i)<<' ';}}}while(prev_permutation(a,a+N));return 0;}解法3-递归(大材小用了)#include<iostream>using namespace std;#define N 5int a[N];//1扶了。
0没扶。
void f(int k){int i;if(k==N){int sum=0;for(i=0;i<N;i++)sum+=a[i];if(sum==1)//只有一个人扶了{//ABCDE5个变量存5个人的真假话状态,1为真话,0为假话int A=(a[0]+a[4]==0);//A :我和E都没有扶老奶奶int B=(a[2]+a[4]==1);//B :老奶奶是被C和E其中一个扶过大街的int C=(a[2]+a[3]==1);//C :老奶奶是被我和D其中一个扶过大街的int D=(a[1]+a[2]==0);//D :B和C都没有扶老奶奶过街int E=(a[4]==0);//E :我没有扶老奶奶if(A+B+C+D+E==2)//5个人有且只有2个人说的是真话{for (i = 0; i < N; i++){if(a[i]) cout<<char('A'+i)<<' ';}}}return;}for(i=1;i>=0;i--){a[k]=i;f(k+1);}}int main(){f(0);return 0;}第5题:牌型种数(2015年省赛C/C++B组第7题)•小明被劫持到X赌城,被迫与其他3人玩牌。