第三届蓝桥杯预赛真题及详细答案

合集下载

第三届蓝桥杯cc++真题

第三届蓝桥杯cc++真题

第三届蓝桥杯cc++真题第三届蓝桥杯真题 c/c++ 以下题⽬我⾃⼰也并不是所有的题⽬都是⼀次性就能做对或是有结题思路的。

有些题⽬也是经过查证⽹上相关的资料或是参考了别⼈的代码和解题思路才做出来的。

总的来看,这份题⽬考了很多循环的只是,还有模拟,动态规划的只是。

其中做题过程中,也有了⼀些新的体会。

起初做代码填空题的时候我没办法知道⾃⼰做的是对还是错,就跑到⽹上查答案,后来发现,题⽬已经给出了代码,起始我们可以⾃⼰加上头⽂件,然后把空缺的代码加上进⾏调试的,这样就可以验证⾃⼰补充的代码是否正确了。

此外在进⾏调试的时候,可以利⽤重定向,将输⼊输出重定向到⽂件中,例如: 输⼊重定向:freopen("testin.txt","r",stdin) 输出重定向: freopen("testout.txt","w",stdout); 重定向以后,再有⼤量输⼊数据或者是⼤量输出数据的时候就省去了输出测试数据的时间,还是⽐较⽅便的。

但是需要注意的是,再编程答题需要提交代码的时候⼀定要记得把重定向语句注释掉或者删掉,否者将会出错。

结果填空题,由于只需要结果,所以我们的算法不必要很优,有很多时候都是可以⽤穷举的暴⼒解决⽅案获取答案的。

以下的题⽬我也只是做了简单的测试,虽然测试结果是正确的。

但是也不保证答案的正确性,所以如果有错的地⽅可以帮忙加以改正。

《1》微⽣物增值问题假设有两种微⽣物 X 和 YX出⽣后每隔3分钟分裂⼀次(数⽬加倍),Y出⽣后每隔2分钟分裂⼀次(数⽬加倍)。

⼀个新出⽣的X,半分钟之后吃掉1个Y,并且,从此开始,每隔1分钟吃1个Y。

现在已知有新出⽣的 X=10, Y=89,求60分钟后Y的数⽬。

如果X=10,Y=90 呢?本题的要求就是写出这两种初始条件下,60分钟后Y的数⽬。

题⽬的结果令你震惊吗?这不是简单的数字游戏!真实的⽣物圈有着同样脆弱的性质!也许因为你消灭的那只 Y 就是最终导致 Y 种群灭绝的最后⼀根稻草!请忍住悲伤,把答案写在“解答.txt”中,不要写在这⾥!解析 可以将时间的推移以0.5分钟为步长,分层6个阶段,每个阶段的X⽤素组x[7]表⽰,其中x[i]表⽰分裂后第0.5*i分钟的x个数,周期为6。

蓝桥杯部分题目(含答案)

蓝桥杯部分题目(含答案)

1、未名湖边的烦恼关键词:递归,蓝桥杯,算法问题描述每年冬天,北大未名湖上都是滑冰的好地方。

北大体育组准备了许多冰鞋,可是人太多了,每天下午收工后,常常一双冰鞋都不剩。

每天早上,租鞋窗口都会排起长龙,假设有还鞋的m个,有需要租鞋的n个。

现在的问题是,这些人有多少种排法,可以避免出现体育组没有冰鞋可租的尴尬场面。

(两个同样需求的人(比如都是租鞋或都是还鞋)交换位置是同一种排法)输入格式两个整数,表示m和n输出格式一个整数,表示队伍的排法的方案数。

样例输入3 2样例输出5数据规模和约定m,n∈[0,18]#include "iostream"#include "cstdio"#include "cmath"#include "algorithm"#include "map"using namespace std;int f(int m,int n){if(m<n) return 0;if(n==0) return 1;return f(m,n-1)+f(m-1,n);}int main(){int m,n;scanf("%d%d",&m,&n);int ans=f(m,n);printf("%d\n",ans);return 0;}2.标题:蚂蚁感冒关键词:结构体排序,蓝桥杯【题目描述】长100厘米的细长直杆子上有n只蚂蚁。

它们的头有的朝左,有的朝右。

每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒。

当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行。

这些蚂蚁中,有1只蚂蚁感冒了。

并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁。

请你计算,当所有蚂蚁都爬离杆子时,有多少只蚂蚁患上了感冒。

【数据格式】第一行输入一个整数n (1 < n < 50), 表示蚂蚁的总数。

大学生蓝桥杯试题及答案

大学生蓝桥杯试题及答案

大学生蓝桥杯试题及答案一、选择题(每题2分,共20分)1. 在计算机科学中,通常用什么来表示一个算法的效率?A. 时间复杂度B. 空间复杂度C. 算法的可读性D. 算法的可维护性答案:A2. 下列哪种数据结构在插入和删除操作时不需要移动其他元素?A. 链表B. 数组C. 栈D. 队列答案:A3. 以下哪个选项是面向对象编程的三个基本特征?A. 封装、继承、多态B. 抽象、封装、继承C. 继承、封装、多态D. 封装、继承、抽象答案:A4. 在HTML中,用于定义最重要的标题的标签是什么?A. <h1>B. <h6>C. <title>D. <header>答案:A5. 在数据库管理系统中,用于从数据库中检索数据的SQL语句是?A. INSERTB. UPDATEC. DELETED. SELECT答案:D6. 在Java中,用于定义一个类的方法的关键字是什么?A. classB. methodC. functionD. public答案:D7. 在C语言中,用于声明一个变量为静态存储的关键字是什么?A. staticB. externC. registerD. auto答案:A8. 在Python中,用于定义一个函数的关键字是什么?A. defB. functionC. methodD. class答案:A9. 在操作系统中,用于管理进程的调度和资源分配的组件是什么?A. 文件系统B. 内存管理C. 进程管理器D. 设备驱动程序答案:C10. 以下哪个协议是用于在互联网上发送电子邮件的?A. HTTPB. FTPC. SMTPD. TCP答案:C二、填空题(每题2分,共20分)1. 在计算机科学中,________是用来衡量算法在最坏情况下执行时间的量度。

答案:时间复杂度2. 在数据结构中,________是一种允许在任意位置插入和删除数据的线性数据结构。

蓝桥杯试题及答案

蓝桥杯试题及答案

蓝桥杯试题及答案一、选择题1. 在Java中,以下哪个关键字用于定义类?A. classB. interfaceC. enumD. struct答案:A2. 下列哪个不是Python的内置数据类型?A. intB. floatC. stringD. list答案:D二、填空题1. 在C语言中,定义一个整型变量的关键字是________。

答案:int2. 在JavaScript中,用于定义函数的关键字是________。

答案:function三、简答题1. 请简述什么是算法的时间复杂度,并给出一个例子。

答案:算法的时间复杂度是指算法执行时间随输入规模增长的变化趋势。

例如,对于一个简单的线性搜索算法,如果数组中有n个元素,最坏情况下需要比较n次,因此其时间复杂度是O(n)。

2. 请解释什么是栈,并给出一个栈的应用场景。

答案:栈是一种后进先出(LIFO)的数据结构,允许在一端进行数据的添加和删除操作。

一个常见的栈的应用场景是函数调用的实现,在编程中,每当调用一个函数,就会将函数的返回地址和局部变量压入栈中,待函数执行完毕后再从栈中弹出。

四、编程题1. 编写一个函数,实现对一个整数数组进行排序。

答案:```javapublic static void sort(int[] array) {for (int i = 0; i < array.length - 1; i++) {for (int j = 0; j < array.length - i - 1; j++) {if (array[j] > array[j + 1]) {int temp = array[j];array[j] = array[j + 1];array[j + 1] = temp;}}}}```2. 编写一个程序,实现计算一个字符串中所有元音字母的数量。

答案:```pythondef count_vowels(s):vowels = "aeiouAEIOU"return sum(1 for char in s if char in vowels)# 示例print(count_vowels("Hello World")) # 输出应该是 3```五、案例分析题1. 描述一个场景,其中使用二叉搜索树(BST)比使用数组更有效,并解释原因。

第三届蓝桥桥杯预赛真题及详细答案

第三届蓝桥桥杯预赛真题及详细答案

第三届蓝桥桥杯预赛真题及详细答案一、微生物增殖假设有两种微生物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 种群灭绝的最后一根稻草!请忍住悲伤,把答案写在“解答.txt”中,不要写在这里!答案:0 和94371840 (此题比较简单就不写程序了,以下均有程序)二、古堡算式福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式:ABCDE * ? = EDCBA 他对华生说:“ABCDE 应该代表不同的数字,问号也代表某个数字!” 华生:“我猜也是!”于是,两人沉默了好久,还是没有算出合适的结果来。

请你利用计算机的优势,找到破解的答案。

把ABCDE 所代表的数字写出来。

答案写在“解答.txt”中,不要写在这里!参考答案:21978 参考程序:#include<stdio.h>void main(){ int k,t1,t;for(k=10234;k<50000;k++){ bool flag[10]={0}; t=k; t1=0;while(t){ if(flag[t%10]) break ; flag[t%10] =true ; t1 = t1*10 + t%10 ; t /= 10 ; } if( t==0 && t1%k==0){ printf("%d * %d = %d\n",k,t1/k,t1); } }}三、比酒量有一群海盗(不多于20 人),在船上比拼酒量。

蓝桥杯c组试题及答案

蓝桥杯c组试题及答案

蓝桥杯c组试题及答案一、选择题(每题5分,共20分)1. 下列关于C语言的描述,错误的是:A. C语言是一种高级语言B. C语言可以直接被计算机执行C. C语言具有结构化的特点D. C语言支持函数式编程答案:B2. 在C语言中,用于定义一个结构体的关键字是:A. structB. unionC. enumD. typedef答案:A3. 下列关于指针的描述,正确的是:A. 指针可以存储变量的地址B. 指针可以存储变量的值C. 指针不能存储数组的地址D. 指针不能存储函数的地址答案:A4. 在C语言中,用于定义一个函数的关键字是:A. functionB. defC. voidD. int答案:D二、填空题(每题5分,共20分)1. 在C语言中,表示逻辑与的运算符是______。

答案:&&2. 用于声明一个整型变量的关键字是______。

答案:int3. 在C语言中,数组的索引是从______开始的。

答案:04. C语言中,用于结束一个程序的语句是______。

答案:return三、编程题(每题30分,共60分)1. 编写一个C语言程序,实现计算并输出100以内所有偶数的和。

```c#include <stdio.h>int main() {int sum = 0;for (int i = 2; i <= 100; i += 2) {sum += i;}printf("Sum of even numbers from 1 to 100 is: %d\n", sum); return 0;}```2. 编写一个C语言程序,实现一个简单的计算器,可以计算两个整数的加、减、乘、除。

```c#include <stdio.h>int main() {int a, b;char op;float result;printf("Enter first number: ");scanf("%d", &a);printf("Enter operator (+, -, *, /): ");scanf(" %c", &op);printf("Enter second number: ");scanf("%d", &b);switch (op) {case '+':result = a + b;break;case '-':result = a - b;break;case '*':result = a * b;break;case '/':if (b != 0)result = (float)a / b;else {printf("Division by zero error!\n"); return 1;}break;default:printf("Invalid operator!\n");return 1;}printf("Result: %.2f\n", result);return 0;}```。

第三届蓝桥杯(高职java预赛题及参考答案)

第三届蓝桥杯(高职java预赛题及参考答案)

1、造成高房价的原因有许多,比如土地出让价格。

既然地价高,土地的面积必须仔细计算。

遗憾的是,有些地块的形状不规则,比如是如图【1.jpg】中所示的五边形。

一般需要把它划分为多个三角形来计算。

已知三边求三角形的面积需要用海伦定理,参见【2.jpg】各条边长数据如下:AB = 52.1BC = 57.2CD = 43.5DE = 51.9EA = 33.4EB = 68.2EC = 71.9根据这些数据求五边形地块的面积。

四舍五入到小数后两位。

只写结果,不要源代码!1.jpg2.jpgpublic class Onea {public static void main(String args[]){double s_ABE = (52.1 + 68.2 + 33.4) / 2;double s_BEC = (68.2 + 57.2 + 71.9) / 2;double s_EDC = (71.9 + 51.9 + 43.5) / 2;// sqrt()是Math中的静态方法可以用类名直接调用double A_ABE = Math.sqrt(s_ABE * (s_ABE - 52.1) * (s_ABE - 33.4) * (s_ABE - 68.2));double A_BEC = Math.sqrt(s_BEC * (s_BEC - 68.2) * (s_BEC - 57.2) * (s_BEC - 71.9));double A_EDC = Math.sqrt(s_EDC * (s_EDC - 71.9) * (s_EDC - 43.5) * (s_EDC - 51.9));System.out.println(A_ABE + A_BEC + A_EDC);}}// 输出的结果是3789.8640994485186public class One {public static void main(String[] args) {double AB = 52.1, BC = 57.2, CD = 43.5, DE = 51.9, EA = 33.4, EB = 68.2, EC = 71.9;System.out.println(mainji(AB,EB,EA) + mainji(EB,BC,EC) +mainji(EC,CD,DE));}static double mainji(double a,double b,double c){double s = (a + b + c)/2;return Math.sqrt(s * (s - a) * (s - b) * (s - c));}}输出结果:3789.86409944851862、今年的植树节(2012年3月12日),小明和他的叔叔还有小伙伴们一起去植树。

第三届 蓝桥杯 预赛题目(部分)1

第三届 蓝桥杯 预赛题目(部分)1

1、结果填空求三个三角形面积。

2、结果填空两人共卖150个鸡蛋,两人赚了一样的钱,交换价格卖,一个卖32元另一个24.5元,求两人卖的鸡蛋数。

3、结果填空ABCDE*?=ECDBA (顺序不记得了每个字母和?代表一个数字,暴力求出ABCDE各自代表的数
4、结果填空13张牌、、、、、
5、代码填空干支纪年
6、代码填空身份证校验
7、代码填空矩阵顺时针旋转90度。

8、程序设计
手机尾号得分,
ABCD,DCBA连号5分;
AAAB,ABBB,3分,AAAA 6分;
ABAB,AABB 2分,AAAA 4分;
6,8,9出现一次一分。

得分为所有符合条件加分项的和。

输入n(小于100)个尾号,输出对应得分
9、程序设计
输入罗马数字输出十进制数。

I V X L C D M 对应1 5 10 50 100 500 1000
III 3 XXX 30 CC 200,出现几次就是其倍数,仅对于IXCM有效
IV 4 左小右大,右减左。

……
……
……
CMXCIX 999
10、程序设计
A B C
D E
空格相邻字母可移动、
表示成字符串ABCDE*
输入若干字符串,可移动得到输出1,不可得到输出0。

蓝桥杯基础试题及答案

蓝桥杯基础试题及答案

蓝桥杯基础试题及答案1. 题目:给定一个整数数组,请找出数组中第二大的数。

答案:首先对数组进行排序,然后取出倒数第二个元素即可。

2. 题目:编写一个函数,实现字符串的反转。

答案:可以使用栈的数据结构,将字符串中的字符依次压入栈中,再依次弹出即可得到反转后的字符串。

3. 题目:判断一个整数是否是回文数。

答案:将整数转换为字符串,然后比较字符串与其反转后的字符串是否相等。

4. 题目:给定一个链表,删除链表的倒数第n个节点。

答案:使用双指针法,一个指针先走n步,然后两个指针一起走,直到第一个指针到达链表末尾,此时第二个指针指向的就是需要删除的节点的前一个节点。

5. 题目:实现一个函数,计算两个整数相加的和。

答案:使用位运算,模拟加法运算的过程,考虑进位的情况。

6. 题目:给定一个二维矩阵,找出矩阵中从左上角到右下角的最短路径,路径上的数字之和最小。

答案:使用动态规划,从左上角开始,每次向下或向右移动,选择路径和最小的方向。

7. 题目:实现一个函数,判断一个整数是否是素数。

答案:从2到该整数的平方根进行遍历,如果该整数能被遍历中的任何一个数整除,则不是素数。

8. 题目:给定一个字符串,找出其中不重复的最长子串的长度。

答案:使用滑动窗口的方法,维护一个窗口,窗口内的字符串都是不重复的,每次向右扩展窗口,并更新最长不重复子串的长度。

9. 题目:给定一个排序数组,找出数组中没有出现的最小正整数。

答案:从1开始遍历,如果当前数字不在数组中,则返回当前数字;如果遍历完数组还没有找到,则返回数组最后一个数字加1。

10. 题目:实现一个函数,计算一个整数的阶乘。

答案:使用递归或循环,从1乘到该整数,注意处理大数的情况。

第三届“蓝桥杯”c、c++组初赛试题

第三届“蓝桥杯”c、c++组初赛试题

第三届“蓝桥杯”全国软件专业人才设计与创业大赛是工业和信息化部人才交流中心、教育部高等学校计算机科学与技术教学指导委员会联合举办的全国性软件专业人才设计与创业大赛。

初赛:大赛分为JAVA软件开发、C/C++语言程序设计两个项目。

2011 c/c++组初赛试题考试时间2小时1、两个乒乓球队进行比赛,各出三人。

甲队为a,b,c三人,乙队为x,y,z三人。

已抽签决定比赛名单。

有人向队员打听比赛的名单。

a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单2、输入一个五位以内的正整数,(1)判断它是一个几位数;(2)请按序输出其各位数字;(3)逆序输出其各位数字。

如输入:56439,输出:5位数5,6,4,3,99,3,4,6,53、任何一个自然数m的立方均可写成m个连续奇数之和。

例如:1^3=12^3=3+53^3=7+9+114^3=13+15+17+19编程实现:输入一自然数n,求组成n^3的n个连续奇数。

4、由键盘输入一个自然数N(1≤N≤9),要求程序在屏幕上输出如下图形。

N=1时:N=3时:N=4时:111111111111112221122222112321123332112221123432111111123332112222211111111注:应保证N在图形中只出现一次,且在中心。

5、验证18位证件号:输入18位证件号,将奇位数的值相加的和求的平均数X,偶位数先与3相乘得到的个位数的和的平均数y。

如果(X+Y)是10的倍数,则证件号正确,否则则错误。

请编写程序验证证件号是否正确。

(12分)列入输入:431023198919230939输出:正确分析:奇位数:3 0 3 9 9 9 3 9 9偶位数:3 0 2 1 8 1 2 1 4X:(3+0+3+9+9+9+3+9+9)/9 = 6Y: 3*3 = 9 0*3 = 0 2*3 = 6 1*3 = 3 8*3 = 24 1*3 = 3 2*3 = 6 1*3 = 3 4*3 = 12 (9+0+6+3+4+3+6+3+2)/9 = 4X+Y = 6+4 = 10。

2012第三届全国软件专业人才设计与开发大赛选拔赛试题-C_预赛_c高职真题(2012年4月7日)

2012第三届全国软件专业人才设计与开发大赛选拔赛试题-C_预赛_c高职真题(2012年4月7日)

2012年蓝桥杯比赛题目及答案考生须知:●考试时间为4小时。

●参赛选手切勿修改机器自动生成的【考生文件夹】的名称或删除任何自动生成的文件或目录,否则会干扰考试系统正确采集您的解答。

●参赛选手切勿在提交的代码中书写“姓名”、“考号”,“院校名”等身份信息或其它与竞赛题目无关的内容,否则成绩无效。

●试题包含三种类型:“结果填空”、“代码填空”与“程序设计”,总计100分。

结果填空:2+3+5+6 = 16分代码填空:8+6+10 = 24 分程序设计:15+17+28 = 60分结果填空要求参赛选手根据题目描述直接填写结果。

求解方式不限。

不要求源代码。

把答案存入【考生文件夹】下对应题号的“解答.txt”中即可。

代码填空题要求参赛选手在弄清给定代码工作原理的基础上填写缺失的部分,使得程序逻辑正确、完整。

所填写的代码不超过一条语句(即中间不能出现分号)。

把填空的答案(仅填空处的答案,不包括题面已存在的代码)存入【考生文件夹】下对应题号的“解答.txt”中即可。

编程题要求选手设计的程序对于给定的输入能给出正确的输出结果。

考生的程序只有能运行出正确结果的时候才有机会得分。

注意:在评卷时使用的输入数据与试卷中给出的实例数据可能是不同的。

选手的程序必须是通用的,不能只对试卷中给定的数据有效。

对每个编程题目,要求考生把所有函数写在一个文件中。

调试好后,存入与【考生文件夹】下对应题号的“解答.txt”中即可。

相关的工程文件不要拷入。

对于编程题目,要求选手给出的解答完全符合ANSI C++标准,不能使用诸如绘图、Win32API、中断调用、硬件操作或与操作系统相关的API。

代码中允许使用STL类库,但不能使用MFC或A TL等非ANSI c++标准的类库。

例如,不能使用CString类型(属于MFC类库)。

1.结果填空(满分2分)造成高房价的原因有许多,比如土地出让价格。

既然地价高,土地的面积必须仔细计算。

遗憾的是,有些地块的形状不规则,比如是如图中所示的五边形。

蓝桥杯试题和答案

蓝桥杯试题和答案

/*很久以前,T王国空前繁荣。

为了更好地管理国家,王国修建了大量的快速路,用于连接首都和王国内的各大城市。

为节省经费,T国的大臣们经过思考,制定了一套优秀的修建方案,使得任何一个大城市都能从首都直接或者通过其他大城市间接到达。

同时,如果不重复经过大城市,从首都到达每个大城市的方案都是唯一的。

J是T国重要大臣,他巡查于各大城市之间,体察民情。

所以,从一个城市马不停蹄地到另一个城市成了J最常做的事情。

他有一个钱袋,用于存放往来城市间的路费。

聪明的J发现,如果不在某个城市停下来修整,在连续行进过程中,他所花的路费与他已走过的距离有关,在走第x千米到第x+1千米这一千米中(x是整数),他花费的路费是x+10这么多。

也就是说走1千米花费11,走2千米要花费23。

J大臣想知道:他从某一个城市出发,中间不休息,到达另一个城市,所有可能花费的路费中最多是多少呢?输入格式:输入的第一行包含一个整数n,表示包括首都在内的T王国的城市数城市从1开始依次编号,1号城市为首都。

接下来n-1行,描述T国的高速路(T国的高速路一定是n-1条)每行三个整数Pi, Qi, Di,表示城市Pi和城市Qi之间有一条高速路,长度为Di 千米。

输出格式:输出一个整数,表示大臣J最多花费的路费是多少。

样例输入:51 2 21 3 12 4 52 5 4样例输出:135样例说明:大臣J从城市4到城市5要花费135的路费。

*/#include<stdio.h>#include<string.h>int a[1000][1010];int main(){int i,j,k,n,x,y,z,max,sum;scanf("%d",&n);for(i=0;i<=n;i++)for(j=0;j<=n;j++)a[i][j]=999999;for(i=1;i<n;i++){scanf("%d%d%d",&x,&y,&z);a[x][y]=z;a[y][x]=z;}max=sum=0;for(k=1;k<=n;k++)for(i=1;i<=n;i++)for(j=1;j<=n;j++)if(i!=j){a[i][j]=a[i][k]+a[k][j]<a[i][j]?a[i][k]+a[k][j]:a[i][j];}for(i=0;i<=n;i++)for(j=0;j<=n;j++)if(a[i][j]<999999)max=a[i][j]>max?a[i][j]:max;for(i=1;i<=max;i++)sum+=(i+10);printf("%d\n",sum);return0;}。

第三届蓝桥杯选拔赛答案

第三届蓝桥杯选拔赛答案

第三届“蓝桥杯”选拔赛试题高职组1、土地测量#include "stdafx.h"#include"math.h"float fun( float a, float b, float c ){ints,A=0;s=(a+b+c )/2;A=sqrt( s * (s-a) * (s-b) * (s-c) );return A;}void main(){floata,b,c;float sum=0;a=fun(52.1, 68.2, 33.4);b=fun(43.5, 51.9, 71.9);c=fun(57.2, 68.2, 71.9);sum=a+b+c;printf("%.2f\n",sum);}#include"stdafx.h"void main(){float x;for(x=1; x<=150; x++){if( 24.5/ (150-x) * x == ( 32/x * (150-x) ) ){printf("第一个人卖了:%.0f个鸡蛋,第二个人卖了:%.0f个鸡蛋\n",x,150-x);break;}}}#include"stdafx.h"void main(){int A,B,C,D,E,F;for(A=0;A<=9;A++){for(B=0;B<=9;B++){for(C=0;C<=9;C++){for(D=0;D<=9;D++){for(E=0;E<=9;E++){for(F=0;F<=9;F++){if((A*10000+B*1000+C*100+D*10+E)*F==(A+B*10+C*100+D*1000+E*10000) ){printf("%d,%d,%d,%d,%d\n",A,B,C,D,E);}}}}}}}}4、巧排扑克牌5、干支纪年void f(int year){char* x[] = {"甲","乙","丙","丁","戊","己","庚","辛","壬","癸"};char* y[] = {"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"};int n = year - 1984;while(n<0) n += 60;printf("%s%s\n", x[ n%10 ], y[2 * (n / 10) + (n % 10) % (n / 10)]);}int main(intargc, char* argv[]){f(1911);f(1970);f(2012);return 0;}charverifyCode(char* s){static int weight[] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};static char map[] = {'1','0','X','9','8','7','6','5','4','3','2'};int sum = 0;for(int i=0; i<17; i++){sum += ( s[i] ) * weight[i]; // 填空}return map[ sum%11 ]; // 填空}#include "stdafx.h"#include"stdlib.h"void rotate(int* x, int rank){//int j;int* y = (int*)malloc( rank*rank*sizeof(int) ); // 填空for(int i=0; i<rank * rank; i++){y[ 12+i/4 + 4*(i%4)] = x[i]; // 填空}for(i=0; i<rank*rank; i++){x[i] = y[i];}free(y);}int main(intargc, char* argv[]){int x[4][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};int rank = 4;rotate(&x[0][0], rank);for(int i=0; i<rank; i++){for(int j=0; j<rank; j++){printf("%4d", x[i][j]);}printf("\n");}return 0;}#include "stdafx.h"#define N 100int fun(int n){int sum;intq,b,s,g;sum=0; //评分初始化q=n/1000; //求千位b=n/100%10; //求百位s=n/10%10; //求十位g=n%10; //求个位//如果出现连号,不管升序还是降序,都加5分if( (q+1==b && b+1==s && s+1==g) || (q-1==b && b-1==s && s-1==g) ) {sum+=5;}//个十百千位都相等,直接加6分if( q==b && b==s && s==g )sum+=6;//前三个数字相同,或后三个数字相同,都加3分else if( (q==b && b==s) || (b==s && s==g) )sum+=3;//个十百千位都相等,直接加2分if( (q==b) && (b==s) && (s==g) )sum+=2;//符合ABAB或者AABB模式的加1分else if( (q==s && b==g) || (q==b && s==g) )sum+=1;//千位含6 8 9 加一分if( q==6 || q==8 || q==9 )sum+=1;//百位含6 8 9 加一分if( b==6 || b==8 || b==9 )sum+=1;//十位含6 8 9 加一分if( s==6 || s==8 || s==9 )sum+=1;//个位含6 8 9 加一分if( g==6 || g==8 || g==9 )sum+=1;return sum;}void main(){inti,j,n;int a[N];scanf("%d",&n); //手机尾号for(i=0;i<n;i++){scanf("%d",&a[i]);}printf("\n");for(i=0;i<n;i++){printf("%d",fun(a[i])); //调用函数printf("\n");}}9、罗马数字#include "stdafx.h"#include "string.h"#define N 100int fun(char *s){int i=0;int sum=0;while(s[i]!='\0'){if(s[i]=='I') //等于I时,I的值为1{if(s[i+1]=='V') //右边为'V'时{sum+=5-1;i+=2;}else if(s[i+1]=='X') //右边为'X'时{sum+=10-1;i+=2;}else if(s[i+1]=='L') //右边为'L'时{sum+=50-1;i+=2;}else if(s[i+1]=='C') //右边为'C'时{sum+=100-1;i+=2;}else if(s[i+1]=='D') //右边为'D'时{sum+=500-1;i+=2;}else if(s[i+1]=='M') //右边为'M'时{sum+=1000-1;i+=2;}else{sum+=1; //出现一次I加1i++;}continue;}else if(s[i]=='V') //等于V时,V的值为5 {if(s[i+1]=='X') //右边为'X'时{sum+=10-5;i+=2;}else if(s[i+1]=='L') //右边为'L'时{sum+=50-5;i+=2;}else if(s[i+1]=='C') //右边为'C'时{sum+=100-5;i+=2;}else if(s[i+1]=='D') //右边为'D'时{sum+=500-5;i+=2;}else if(s[i+1]=='M') //右边为'M'时{sum+=1000-5;i+=2;}else{sum+=5; //出现一次V加5i++;}continue;}else if(s[i]=='X') //等于X时,X的值为10 {if(s[i+1]=='L') //右边为'L'时{sum+=50-10;i+=2;}else if(s[i+1]=='C') //右边为'C'时{sum+=100-10;i+=2;}else if(s[i+1]=='D') //右边为'D'时{sum+=500-10;i+=2;}else if(s[i+1]=='M') //右边为'M'时{sum+=1000-10;i+=2;}else{sum+=10; //出现一次X加10i++;}continue;}else if(s[i]=='L') //等于L时,L的值为50 {if(s[i+1]=='C') //右边为'C'时{sum+=100-50;i+=2;}else if(s[i+1]=='D') //右边为'D'时{sum+=500-50;i+=2;}else if(s[i+1]=='M') //右边为'M'时{sum+=1000-50;i+=2;}else{sum+=50; //出现一次L加50i++;}continue;}else if (s[i]=='C') //等于C时,C的值为100 {if(s[i+1]=='D') //右边为'D'时{sum+=500-100;i+=2;}else if(s[i+1]=='M') //右边为'M'时{sum+=1000-100;i+=2;}else{sum+=100; //出现一次C加100i++;}continue;}else if (s[i]=='D') //等于D时,D的值为500{if(s[i+1]=='M') //右边为'M'时{sum+=1000-500;i+=2;}else{sum+=500; //出现一次D加500i++;}continue;}else if (s[i]=='M') //等于M时,M的值为1000 {{sum+=1000; //出现一次M加1000 i++;}continue;}}return sum;}void main(){char a[N];intn,i;int k[N];scanf("%d",&n);for(i=0;i<n;i++) {scanf("%s",a);k[i]=fun(a);}for(i=0;i<n; i++){printf("%d\n",k[i]); }}。

蓝桥杯预赛题目与答案

蓝桥杯预赛题目与答案

蓝桥杯预赛题目1第一题标题:啤酒和饮料啤酒每罐2.3元,饮料每罐1.9元。

小明买了若干啤酒和饮料,一共花了82.3元。

我们还知道他买的啤酒比饮料的数量少,请你计算他买了几罐啤酒。

注意:答案是一个整数。

请通过浏览器提交答案。

不要书写任何多余的内容(例如:写了饮料的数量,添加说明文字等)。

#include <stdio.h>void main() { int pj,yl; //啤酒与饮料double sum=82.3; for(pj=0; pj<=20; pj++) { yl=(int)((sum-pj*2.3)/1.9); if(pj*2.3+yl*1.9==sum) { printf("pj=%d,yl=%d\n",pj,yl); //pj=11 yl=30 } } }第二题标题:切面条一根高筋拉面,中间切一刀,可以得到2根面条。

如果先对折1次,中间切一刀,可以得到3根面条。

如果连续对折2次,中间切一刀,可以得到5根面条。

那么,连续对折10次,中间切一刀,会得到多少面条呢?答案是个整数,请通过浏览器提交答案。

不要填写任何多余的内容。

#include <stdio.h> void main(){ int qie(int n); int g(int n); int sum=0; //面条总数int n=10; sum=qie(n); printf("%d\n",sum); }int qie(int n) //折叠n次以后,切一刀后的面条数{ int g(int n); if(n==1) { return 3; } else { return g(n-1)+ qie(n-1); //g(n)是有所有面条都有折痕一边的面条数} }int g(int n) { if(n==1) { return 2; } else { return g(n-1)*2; } }-----1025第三题标题:李白打酒话说大诗人李白,一生好饮。

第三届蓝桥杯全国选拔赛答案解析

第三届蓝桥杯全国选拔赛答案解析

第一题:微生物增殖#include <cstdio>int main(){long int X=10, Y=90;for(int k=1; k<=120; k++)//半分钟一个单位{if(k%2==1)Y -= X;//因为X出生半分钟后就要吃Y,尔后每1分钟要吃Y,所以永远都是奇数个半分钟的时候吃Y,又因为此时X不会增长(题目为了减小讨论的复杂度),所以直接减X数量即可。

if(k%4==0)Y *= 2;//每2分钟翻倍if(k%6==0)X *= 2;//每3分钟翻倍,X和Y的翻倍是相互独立的,不需要另作讨论。

}printf("%d", Y);return 0;}第二题:古堡算式#include <cstdio>int main(){long int X=10, Y=90;for(int k=1; k<=120; k++)//半分钟一个单位{if(k%2==1)Y -= X;//因为X出生半分钟后就要吃Y,尔后每1分钟要吃Y,所以永远都是奇数个半分钟的时候吃Y,又因为此时X不会增长(题目为了减小讨论的复杂度),所以直接减X数量即可。

if(k%4==0)Y *= 2;//每2分钟翻倍if(k%6==0)X *= 2;//每3分钟翻倍,X和Y的翻倍是相互独立的,不需要另作讨论。

}printf("%d", Y);return 0;}第三题:比酒量#include <cstdio>#define MAX 20int n, m; //n个海盗,m轮后全体倒下,船长喝了t瓶酒double drink[MAX], t; //记录船长每轮喝的酒量void dfs(int x, int y)if(y <= 0){double sum = 0.0;for(int i = 1; i <= m; i++)sum += drink[i];double dif = sum - t;if(dif < 0.0) dif = -dif;if(dif < 0.000001){for(int i = m; i > 0; i--)printf("%d ", (int)(1.0 / drink[i]));printf("\n");}return;}if(x <= 0) return;drink[y] = 1.0 / x;for(int i = 1; i < x; i++)dfs(x - i, y - 1);}int main(){m = 4; //喝了四轮t = 1.0; //船长喝了一瓶酒for(n = 20; n >= 1; n--)dfs(n, m);return 0;}第四题:奇怪的比赛#include <cstdio>#define MAX 20int n, m; //n个海盗,m轮后全体倒下,船长喝了t瓶酒double drink[MAX], t; //记录船长每轮喝的酒量void dfs(int x, int y){if(y <= 0){double sum = 0.0;for(int i = 1; i <= m; i++)sum += drink[i];double dif = sum - t;if(dif < 0.0) dif = -dif;if(dif < 0.000001){for(int i = m; i > 0; i--)printf("%d ", (int)(1.0 / drink[i]));printf("\n");}return;}if(x <= 0) return;drink[y] = 1.0 / x;for(int i = 1; i < x; i++)dfs(x - i, y - 1);}int main(){m = 4; //喝了四轮t = 1.0; //船长喝了一瓶酒for(n = 20; n >= 1; n--)dfs(n, m);return 0;}第五题:转方阵sizeof(int)*rank*rankrank*(i%rank) + rank-i/rank-1第六题:大数乘法n3/base+n2/base+n4%baser[2]/base第七题:放棋子NumRow!=3 || NumCol!=3f(x,r,c+1)x[r][c]==1第八题:密码发生器#include <cstdio>#include <cstring>#define MAX 1005long num[6];char tmp[MAX];int main(){int t;scanf("%d", &t);while(t){memset(num, 0, sizeof num);fgets(tmp, MAX, stdin);if(tmp[0] == '\n' || strlen(tmp) == 0) continue;for(int i = 0; tmp[i] != 0 && tmp[i] != '\n'; i++){num[i%6] += tmp[i];}for(int j = 0; j < 6; j++){int t = num[j] % 9;printf("%d", t ? t : 9);}putchar('\n');--t;}return 0;}第八题:密码发生器#include <cstdio>#include <cstring>#define MAX 1005long num[6];char tmp[MAX];int main(){int t;scanf("%d", &t);while(t){memset(num, 0, sizeof num);fgets(tmp, MAX, stdin);if(tmp[0] == '\n' || strlen(tmp) == 0) continue;for(int i = 0; tmp[i] != 0 && tmp[i] != '\n'; i++){num[i%6] += tmp[i];}for(int j = 0; j < 6; j++){int t = num[j] % 9;printf("%d", t ? t : 9);}putchar('\n');--t;}return 0;}第九题:夺冠概率#include <cstdio>#include <stdlib.h>#include <time.h>#define COUNT 100000const int g = 0;double P[4][4] = {{0, 0.1, 0.3, 0.5}, {0.9, 0, 0.7, 0.4},{0.7, 0.3, 0, 0.2},{0.5, 0.6, 0.8, 0}};int main(){srand((unsigned)time(NULL));double sum = 0.0;for(int k = 1; k <= COUNT; k++){int x = g, y = g, z = g;while(x == g) x = rand() % 4;//while(y==g || y==x) y=rand()%4; //此处的生成y的方法和下面的方法有轻微差异for(int ii = 0; ii < 4 && (ii == g || ii == x); )++ii; //约有0.001的浮动,推荐用下面这个方法y = ii;for(int i = 0; i < 4 && (i == g || i == x || i == y); )++i;z = i;double r = 1 - (P[x][g] + P[g][x] * (P[y][z] * P[y][g] + P[z][y] * P[z][g]));sum += r;}printf("%lf\n", sum / COUNT);return 0;}第十题:#include <stdio.h>#include <string.h>int a[10001];int b[4] = {1, 3, 7, 8};int main(){int i, n, j;memset(a, 0, sizeof a); //初始化判定数组为0a[0] = 1; //说明对方取完了最后一堆,那么自己胜利for(i = 1; i <= 10000; i++)for(j = 0; j < 4; j++)if(i - b[j] >= 0){if(a[i-b[j]] == 0) //有取法能致使对方输,那么自己就要赢{a[i] = 1;break;}}scanf("%d", &n);while(n--){scanf("%d", &i);printf("%d\n", a[i]);}return 0;}。

蓝桥杯试题及答案C语言c组

蓝桥杯试题及答案C语言c组

蓝桥杯试题及答案C语言c组蓝桥杯试题及答案C语言C组1. 题目一:字符串反转要求:编写一个函数,实现字符串的反转。

答案:以下是一个简单的字符串反转函数的实现。

```cvoid reverseString(char* str) {int i = 0;int j = strlen(str) - 1;while (i < j) {char temp = str[i];str[i] = str[j];str[j] = temp;i++;j--;}}```2. 题目二:计算阶乘要求:编写一个函数,计算一个整数的阶乘。

答案:以下是一个计算整数阶乘的函数实现。

```clong long factorial(int n) {if (n == 0) return 1;long long result = 1;for (int i = 1; i <= n; i++) {result *= i;}return result;}```3. 题目三:寻找最大值要求:给定一个整数数组,找出数组中的最大值。

答案:以下是一个寻找数组最大值的函数实现。

```cint findMax(int arr[], int size) {int max = arr[0];for (int i = 1; i < size; i++) {if (arr[i] > max) {max = arr[i];}}return max;}```4. 题目四:求两个数的最大公约数要求:编写一个函数,计算两个整数的最大公约数。

答案:以下是一个使用欧几里得算法求最大公约数的函数实现。

```cint gcd(int a, int b) {if (b == 0) return a;return gcd(b, a % b);}```5. 题目五:判断素数要求:编写一个函数,判断一个整数是否为素数。

答案:以下是一个判断整数是否为素数的函数实现。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第三届蓝桥桥杯预赛真题及详细答案一、微生物增殖假设有两种微生物X 和YX出生后每隔3分钟分裂一次(数目加倍),Y出生后每隔2分钟分裂一次(数目加倍)。

一个新出生的X,半分钟之后吃掉1个Y,并且,从此开始,每隔1分钟吃1个Y。

现在已知有新出生的X=10, Y=89,求60分钟后Y的数目。

如果X=10,Y=90 呢?本题的要求就是写出这两种初始条件下,60分钟后Y的数目。

题目的结果令你震惊吗?这不是简单的数字游戏!真实的生物圈有着同样脆弱的性质!也许因为你消灭的那只Y 就是最终导致Y 种群灭绝的最后一根稻草!请忍住悲伤,把答案写在“解答.txt”中,不要写在这里!答案:0 和94371840(此题比较简单就不写程序了,以下均有程序)二、古堡算式福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式:ABCDE * ? = EDCBA他对华生说:“ABCDE应该代表不同的数字,问号也代表某个数字!”华生:“我猜也是!”于是,两人沉默了好久,还是没有算出合适的结果来。

请你利用计算机的优势,找到破解的答案。

把ABCDE 所代表的数字写出来。

答案写在“解答.txt”中,不要写在这里!参考答案:21978参考程序:#include<stdio.h>void main(){int k,t1 ,t;for(k=10234;k<50000;k++){bool flag[10]={0};t=k;t1=0;while(t){if(flag[t%10])break ;flag[t%10] = true ;t1 = t1*10 + t%10 ;t /= 10 ;}if( t==0 && t1%k==0){printf("%d * %d = %d\n",k,t1/k,t1);}}三、比酒量有一群海盗(不多于20人),在船上比拼酒量。

过程如下:打开一瓶酒,所有在场的人平分喝下,有几个人倒下了。

再打开一瓶酒平分,又有倒下的,再次重复...... 直到开了第4瓶酒,坐着的已经所剩无几,海盗船长也在其中。

当第4瓶酒平分喝下后,大家都倒下了。

等船长醒来,发现海盗船搁浅了。

他在航海日志中写到:“......昨天,我正好喝了一瓶.......奉劝大家,开船不喝酒,喝酒别开船......”请你根据这些信息,推断开始有多少人,每一轮喝下来还剩多少人。

如果有多个可能的答案,请列出所有答案,每个答案占一行。

格式是:人数,人数,...例如,有一种可能是:20,5,4,2,0答案写在“解答.txt”中,不要写在这里!参考答案:12 6 4 2 015 10 3 2 018 9 3 2 020 5 4 2 0参考程序:#include<stdio.h>void f(int a[],int n){inti ;if(n==3){intx,y;x = a[0] * a[1] + a[0] * a[2] + a[1] * a[2] ;y = a[0] * a[1] * a[2] ;x = y - x ;if( x>0 &&y%x==0 && y/x<a[2] ){printf("%d %d %d %d 0\n",a[0],a[1],a[2],y/x);}return;}i = a[n-1] - 1 ;while(i){a[n] = i ;f(a,n+1);i-- ;}}void main(){int a[3]={0};for(inti=4;i<=20;i++){a[0] = i ;f(a,1);}四、奇怪的比赛某电视台举办了低碳生活大奖赛。

题目的计分规则相当奇怪:每位选手需要回答10个问题(其编号为1到10),越后面越有难度。

答对的,当前分数翻倍;答错了则扣掉与题号相同的分数(选手必须回答问题,不回答按错误处理)。

每位选手都有一个起步的分数为10分。

某获胜选手最终得分刚好是100分,如果不让你看比赛过程,你能推断出他(她)哪个题目答对了,哪个题目答错了吗?如果把答对的记为1,答错的记为0,则10个题目的回答情况可以用仅含有1和0的串来表示。

例如:0010110011 就是可能的情况。

你的任务是算出所有可能情况。

每个答案占一行。

答案写在“解答.txt”中,不要写在这里!参考答案:101101000001110100000010110011参考程序:#include<stdio.h>//score为完成第n题之后的分数void f(char s[] , int n , int score){if(n==0){if(score==10)puts(s);return;}//第n题答错s[n-1] = '0' ;f( s , n-1 , score+n );//第n题答对if(score%2==0){s[n-1] = '1' ;f(s,n-1,score/2);}}void main(){char s[10];s[10] = '\0' ;f(s,10,100);}五、转方阵对一个方阵转置,就是把原来的行号变列号,原来的列号变行号例如,如下的方阵:1 2 3 45 6 7 813 14 15 16转置后变为:1 5 9 132 6 10 143 7 11 154 8 12 16但,如果是对该方阵顺时针旋转(不是转置),却是如下结果:13 9 5 114 10 6 215 11 7 316 12 8 4下面的代码实现的功能就是要把一个方阵顺时针旋转。

void rotate(int* x, int rank){int* y = (int*)malloc(___________________); // 填空for(inti=0; i<rank * rank; i++){y[_________________________] = x[i]; // 填空}for(i=0; i<rank*rank; i++){x[i] = y[i];}free(y);}int main(intargc, char* argv[]){int x[4][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};int rank = 4;rotate(&x[0][0], rank);for(inti=0; i<rank; i++){for(int j=0; j<rank; j++){printf("%4d", x[i][j]);}printf("\n");}return 0;}请分析代码逻辑,并推测划线处的代码。

答案写在“解答.txt”文件中注意:只写划线处应该填的内容,划线前后的内容不要抄写。

rank*rank*sizeof(int)(i%rank)*rank + rank-i/rank-1六、大数乘法对于32位字长的机器,大约超过20亿,用int类型就无法表示了,我们可以选择int64类型,但无论怎样扩展,固定的整数类型总是有表达的极限!如果对超级大整数进行精确运算呢?一个简单的办法是:仅仅使用现有类型,但是把大整数的运算化解为若干小整数的运算,即所谓:“分块法”。

如图【1.jpg】表示了分块乘法的原理。

可以把大数分成多段(此处为2段)小数,然后用小数的多次运算组合表示一个大数。

可以根据int的承载能力规定小块的大小,比如要把int 分成2段,则小块可取10000为上限值。

注意,小块在进行纵向累加后,需要进行进位校正。

以下代码示意了分块乘法的原理(乘数、被乘数都分为2段)。

voidbigmul(int x, int y, int r[]){int base = 10000;int x2 = x / base;int x1 = x % base;int y2 = y / base;int y1 = y % base;int n1 = x1 * y1;int n2 = x1 * y2;int n3 = x2 * y1;int n4 = x2 * y2;r[3] = n1 % base;r[2] = n1 / base + n2 % base + n3 % base;r[1] = ____________________________________________; // 填空r[0] = n4 / base;r[1] += _______________________; // 填空r[2] = r[2] % base;r[0] += r[1] / base;r[1] = r[1] % base;}int main(intargc, char* argv[]){int x[] = {0,0,0,0};bigmul(87654321, 12345678, x);printf("%d%d%d%d\n", x[0],x[1],x[2],x[3]);return 0;}请分析代码逻辑,并推测划线处的代码。

答案写在“解答.txt”文件中注意:只写划线处应该填的内容,划线前后的内容不要抄写。

参考答案:n2/base + n3/base + n4%baser[2]/base七、放棋子今有6 x 6 的棋盘格。

其中某些格子已经预先放好了棋子。

现在要再放上去一些,使得:每行每列都正好有3颗棋子。

我们希望推算出所有可能的放法。

下面的代码就实现了这个功能。

初始数组中,“1”表示放有棋子,“0”表示空白。

int N = 0;boolCheckStoneNum(int x[][6]){for(int k=0; k<6; k++){intNumRow = 0;intNumCol = 0;for(inti=0; i<6; i++){if(x[k][i]) NumRow++;if(x[i][k]) NumCol++;}if(_____________________) return false; // 填空}return true;}intGetRowStoneNum(int x[][6], int r){int sum = 0;for(inti=0; i<6; i++) if(x[r][i]) sum++;return sum;}intGetColStoneNum(int x[][6], int c){int sum = 0;for(inti=0; i<6; i++) if(x[i][c]) sum++;return sum;}void show(int x[][6]){for(inti=0; i<6; i++){for(int j=0; j<6; j++) printf("%2d", x[i][j]);printf("\n");}printf("\n");}void f(int x[][6], int r, int c);voidGoNext(int x[][6], int r, int c){if(c<6)_______________________; // 填空elsef(x, r+1, 0);}void f(int x[][6], int r, int c){if(r==6){if(CheckStoneNum(x)){N++;show(x);}return;}if(______________) // 已经放有了棋子{GoNext(x,r,c);return;}intrr = GetRowStoneNum(x,r);int cc = GetColStoneNum(x,c);if(cc>=3) // 本列已满GoNext(x,r,c);else if(rr>=3) // 本行已满f(x, r+1, 0);else{x[r][c] = 1;GoNext(x,r,c);x[r][c] = 0;if(!(3-rr >= 6-c || 3-cc >= 6-r)) // 本行或本列严重缺子,则本格不能空着!GoNext(x,r,c);}}int main(intargc, char* argv[]){int x[6][6] = {{1,0,0,0,0,0},{0,0,1,0,1,0},{0,0,1,1,0,1},{0,1,0,0,1,0},{0,0,0,1,0,0},{1,0,1,0,0,1}};f(x, 0, 0);printf("%d\n", N);return 0;}请分析代码逻辑,并推测划线处的代码。

相关文档
最新文档