2016第七届蓝桥杯CC++-B组题解
蓝桥杯第七届cc初赛试题及答案

蓝桥杯第七届cc初赛试题及答案蓝桥杯第七届CC初赛试题及答案1. 选择题1.1 以下哪个选项是C语言中定义数组的正确方式?A) int array[10];B) int array[];C) int [10] array;D) int array=10;答案:A1.2 以下哪个关键字用于定义一个结构体?A) structB) unionC) enumD) typedef答案:A1.3 在C语言中,哪个运算符用于取地址?A) *B) &C) %D) #答案:B2. 填空题2.1 在C语言中,关键字________用于定义一个函数。
答案:void2.2 如果一个变量的值是10,那么表达式sizeof(&variable)的结果是________。
答案:4(或根据系统不同,可能是8)2.3 在C语言中,________运算符用于定义一个指针。
答案:*3. 编程题3.1 编写一个C语言程序,计算并输出100以内所有偶数的和。
答案:```c#include <stdio.h>int main() {int sum = 0;for (int i = 1; i <= 100; i++) {if (i % 2 == 0) {sum += i;}}printf("Sum of even numbers from 1 to 100 is: %d\n", sum);return 0;}```3.2 编写一个C语言程序,实现字符串的反转。
答案:```c#include <stdio.h>#include <string.h>void reverseString(char *str) {int len = strlen(str);for (int i = 0; i < len / 2; i++) {char temp = str[i];str[i] = str[len - i - 1];str[len - i - 1] = temp;}}int main() {char str[] = "Hello, World!";reverseString(str);printf("Reversed string: %s\n", str);return 0;}```4. 简答题4.1 请解释C语言中指针和引用的区别。
蓝桥杯题-基础练习(带答案).doc

基础练习21-基础练习Sine之舞问题描述最近町为他的奶牛们开设了数学分析课,FJ知道若耍学好这门课,必须有一个好的三角函数基本功。
所以他准备和奶牛们做-个“SineZ舞”的游戏,寓教于乐,提高奶牛们的计算能力。
不妨设An=sin(l - sin (2+sin (3 - sin (4+... sin(n))...)Sn二(…(Al+n)A2+n-1)A3+.・• +2)An+lFJ想让奶牛们计算Sn的值,请你帮助FJ打印出Sn的完整表达式,以方便奶牛们做题。
输入格式仅冇一个数:N<201。
输出格式请输出相应的表达式Sn,以一个换行符结束。
输出屮不得含有多余的空格或换行、回车符。
样例输入3样例输出((sin(l)+3)sin(l-sin(2))+2)sin(l-sin(2 + sin(3)))+1解答:import java.util.Seanner;public class Main{* @param args*/public static void main(String[] args) {// TODO Auto-generated method stubSeanner seanner=new Seanner(System.in);System.out.pri ntln (sflnteger.parsel nt(sca nner.n extLi ne()), 1));//System.out.print(sin(3, 1));}static String s(int n」nt i)讦(i==n) return ""+An(n)+"+"+(n-i+l);}else {return ,,("+An(i)+"+"+(n-i+l)+,,)"+""+s(n, i+l)+"";}}static String An(int n){return sin(n, 1);}static String sin(int n,int i){if(i==n){return ”sin(”+n+")”;}else {if(i%2==0)return "sin("+i+"+"+sin(n z i+l)+")";//(int)Math.pow(-lJ)else {return "sin("+i+"-"+sin(n/ i+l)+,,)'^;}}}}2 2-基础练习FJ的字符串FJ在沙盘上写了这样一些字符串:Al = “A”A2 = “ABA”A3 = “ABACABA”A4 = a ABACABADABACABA v• • • • • •你能找出其屮的规律并写所有的数列AN吗?输入格式仅有一个数:N W 26。
蓝桥杯做对几道题就可以拿奖

蓝桥杯做对几道题就可以拿奖
参加“蓝桥杯”比赛并不是做对几道题就可以拿奖的,选手能否获奖主要以选手所提交的程序的运行结果为依据(大于90%),同时会参考选手程序的编码风格、逻辑性、可读性等方面。
一般题目的难度主要集中于对算法的设计和逻辑的组织上。
理论上,选手不可能通过猜测或其它非编程的手段获得问题的解。
选手给出的解法应具有普遍性,不能只适用于题目的示例数据(当然,至少应该适用于题目的示例数据)。
为了测试选手给出解法的性能,评分时用的测试用例可能包含大数据量的压力测试用例,选手选择算法时要充分考虑可行性的问题。
2023蓝桥杯研究生组题解

2023蓝桥杯研究生组题解摘要:1.蓝桥杯研究生组简介2.蓝桥杯研究生组题解概述3.解题策略与技巧4.典型题目分析5.练习与提高建议正文:尊敬的读者,您好!这是一篇关于2023年蓝桥杯研究生组题解的文章,旨在帮助您更好地了解蓝桥杯研究生组赛事,并提供实用的解题方法和技巧。
以下是文章的详细内容:一、蓝桥杯研究生组简介蓝桥杯是我国著名的计算机科学与技术类赛事,自2002年创办以来,已经成为了国内高校研究生展示自己才华的重要平台。
蓝桥杯研究生组赛事分为初赛、复赛和决赛三个阶段,涵盖了计算机科学与技术领域的多个方向,如算法与数据结构、软件开发、人工智能等。
参赛选手需要在规定时间内完成一系列题目,以展示自己的编程能力和解决问题的技巧。
二、蓝桥杯研究生组题解概述在蓝桥杯研究生组赛事中,题目类型丰富多样,包括算法题、编程题、应用题等。
为了更好地应对比赛,我们需要对各类题型有一定的了解,并掌握相应的解题方法。
在接下来的部分,我们将重点介绍一些解题策略和技巧。
三、解题策略与技巧1.快速阅读题目:在开始解题前,先仔细阅读题目,了解题意。
对于一些复杂题目,可以先列出关键信息,以便后续查找。
2.划分题目类型:根据题目的特点,将其划分为熟悉的类型,如排序、搜索、动态规划等。
3.提取关键信息:分析题目中给出的数据结构和约束条件,以便后续编写代码。
4.设计算法:根据题目类型和关键信息,选择合适的算法进行求解。
如贪心算法、分治算法、回溯算法等。
5.编写代码:根据算法设计,使用编程语言编写代码。
注意代码风格和时间复杂度。
6.调试与优化:在完成代码后,进行调试和优化,确保代码的正确性和效率。
四、典型题目分析在本部分,我们将分析一些蓝桥杯研究生组的典型题目,以帮助您更好地理解解题方法。
1.算法题:如排序、查找等。
这类题目可以使用快速排序、归并排序、二分查找等算法进行求解。
2.数据结构题:如链表、树、图等。
这类题目需要对数据结构有一定的了解,如链表的插入、删除操作,树的遍历等。
蓝桥杯课程大纲

蓝桥杯课程大纲
蓝桥杯是中国最具影响力的计算机竞赛之一,也是最具竞争力的高中生计算机竞赛。
蓝桥杯课程是为了帮助学生更好地准备蓝桥杯竞赛,提升计算机编程和算法能力而设计的。
蓝桥杯课程大纲大致分为以下几个部分:
1. 编程基础:包括编程语言的基础知识、常见数据类型、变量和常量等基本概念的介绍,编写简单的程序,了解程序的执行过程等。
2. 数据结构:介绍常见的数据结构,如数组、链表、栈、队列等,包括它们的定义、特性和常用操作。
教授如何选择合适的数据结构来解决不同的问题,以及如何对数据结构进行设计和实现。
3. 算法设计与分析:主要介绍常见的算法思想和设计方法,如贪心算法、分治法、动态规划等,以及算法时间复杂度和空间复杂度的分析。
通过一些典型问题的实际演练,提高学生解决问题的能力。
4. 解题技巧与实战:课程将通过一些典型的蓝桥杯题目,讲解解题思路、技巧和方法,培养学生解决问题的能力。
同时,提供大量的练习题和模拟考试,帮助学生熟悉比赛的题型和考试环境。
5. 竞赛辅导与经验分享:由曾在蓝桥杯竞赛中获奖的学长学姐
分享他们的竞赛经验和解题心得,指导学生如何在有限的时间内取得最好的成绩。
总之,蓝桥杯课程旨在提高学生的编程和算法能力,帮助他们在蓝桥杯竞赛中取得优异成绩。
通过系统的学习和实践,学生能够掌握编程基础知识,熟悉常用数据结构和算法,培养解决实际问题的能力,并最终在蓝桥杯竞赛中脱颖而出。
蓝桥杯--单词接龙--dfs

蓝桥杯--单词接龙--dfs算法训练单词接龙时间限制:1.0s 内存限制:256.0MB问题描述 单词接龙是⼀个与我们经常玩的成语接龙相类似的游戏,现在我们已知⼀组单词,且给定⼀个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合部分合为⼀部分,例如 beast和astonish,如果接成⼀条龙则变为beastonish,另外相邻的两部分不能存在包含关系,例如at 和 atide 间不能相连。
输⼊格式 输⼊的第⼀⾏为⼀个单独的整数n (n<=20)表⽰单词数,以下n ⾏每⾏有⼀个单词,输⼊的最后⼀⾏为⼀个单个字符,表⽰“龙”开头的字母。
你可以假定以此字母开头的“龙”⼀定存在.输出格式 只需输出以此字母开头的最长的“龙”的长度样例输⼊ 5 at touch cheat choose tact a样例输出23样例说明 连成的“龙”为atoucheatactactouchoose思路:使⽤string str[]数组存储单词,visit[]数组标志单词是否被访问过,MAX存放最⼤长度。
然后dfs每⼀个单词,如果compare()返回不等于-1,则将此单词不同的字符加到龙上,将该单词的访问加1,则dfs下⼀个单词并将值传⼊,将长度lenth与MAX进⾏⽐较,⼤的值赋给MAX,并将此时接龙的长度和此时的字符串向下传递,⼀次深度遍历结束,将该单词的访问减1;#include<iostream>#include<cstdio>#include<string>using namespace std;#define number 20int N; //输⼊单词数int MAX = 0,visit[number+5];string str[number+5];//思路:⽤龙尾单词的最后⼀个字母去和当前单词字母逐⼀进⾏⽐较,直⾄找到相同且此时⼩于l,然后从j = i逐⼀向前进⾏⽐较直⾄j=0都相同则返回iint compare(int tail,int loc) //⽐较两个单词是否可以接龙,如果可以返回单词相同的字母数,如果包含或没有相同的字母则⽆法接龙{string stail,sloc;stail = str[tail];sloc = str[loc];int l = min(stail.length(),sloc.length());int i;if(l == 1){if(stail[0] == sloc[0])return1;}else{for(i=0;i<l-1;i++){if(stail[stail.length()-1]==sloc[i]){int j;for(j = i;j>=0;j--){if(stail[stail.length()-1-i+j]!=sloc[j])break;}if(j == -1) return i+1;}}}return -1;}void init(){for(int i=0;i<=N;i++){visit[i] = 0;cin>>str[i];}}void dfs(string dragon1,int tail) //初始龙为存放字符数组下标为N处单词{for(int i=0;i<N;i++){if(visit[i] < 2){int sameL = compare(tail,i);if(sameL != -1){string dragon2 ;dragon2 = dragon1;visit[i]++;string t = str[i];int l = t.length();t = t.substr(sameL); // c++11标准dragon2.append(t);MAX = dragon2.length()>MAX? dragon2.length():MAX;dfs(dragon2,i);visit[i]--;}}}}int main(){cin>>N;init();MAX = str[N].length();dfs(str[N],N);cout<<MAX;return0;}int main(){cin>>N;init();MAX = str[N].length();dfs(str[N],N);cout<<MAX;return 0;}。
蓝桥杯试题及答案
蓝桥杯试题及答案一、选择题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)比使用数组更有效,并解释原因。
蓝桥杯数学公式
蓝桥杯数学公式蓝桥杯数学公式,这可真是个让人又爱又恨的话题!就拿我曾经遇到的一个事儿来说吧。
有一次,我在给学生们讲解蓝桥杯相关的数学知识,其中涉及到一个复杂的公式。
当时班里有个叫小明的孩子,瞪着大眼睛,一脸迷茫地看着黑板上的公式,那表情仿佛在说:“这是啥呀?外星密码吗?”我看着他那可爱又无奈的样子,心里既觉得好笑,又暗下决心一定要让他弄明白。
蓝桥杯里的数学公式,那可真是五花八门,啥样的都有。
比如说等差数列求和公式,Sn = n(a1 + an)/2 。
这公式看起来简单,可真要用起来,还得仔细琢磨琢磨。
就像你要计算一堆连续的数字相加,比如 1到 100 的和,直接代入公式,瞬间就能得出结果,是不是感觉挺神奇的?再说说等比数列的通项公式 an = a1 * q^(n - 1) ,这里面的 q 是公比。
想象一下,你有一堆按照一定比例增长或者减少的数字,用这个公式就能轻松找到任意一项的值。
还有像二次函数的顶点坐标公式 (-b/2a, (4ac - b²)/4a) ,这个在解决很多几何和实际问题中可有用了。
比如说要建一个面积最大的矩形花园,给定周长,就能通过这个公式算出矩形的长和宽,从而得到最大面积。
还有三角函数的那些公式,像正弦函数 sin A = 对边/斜边,余弦函数 cos A = 邻边/斜边。
这在解决三角形的各种问题中,那可是大显身手。
回到小明同学这儿,为了让他搞懂那个复杂的公式,我可是想尽了办法。
我给他打比方,举例子,还让他自己动手推导。
终于,他的眼睛里不再是迷茫,而是透露出一丝恍然大悟的光芒,那一刻,我心里别提多有成就感了!在蓝桥杯的世界里,数学公式就像是一把把神奇的钥匙,能打开一扇扇通往知识宝藏的大门。
但要掌握这些钥匙可不容易,得下功夫,多练习,多思考。
比如说排列组合的公式,C(n, m) = n! / [m!(n - m)!] 。
这个在计算可能性的问题时经常用到。
就像从一堆不同的水果中选出几种,有多少种选法,就得靠它来算。
蓝桥杯 python 初级 题
蓝桥杯python 初级题好的,我会为您提供一个蓝桥杯Python初级题的示例,并确保正文不包含生成的文本。
题目:编写一个Python程序,要求用户输入一个整数n,然后输出1到n之间的所有素数。
python复制代码def is_prime(num):"""判断一个数是否为素数"""if num < 2:return Falsefor i in range(2, int(num ** 0.5) + 1):if num % i == 0:return Falsereturn Truedef generate_primes(n):"""生成1到n之间的所有素数""" primes = []for num in range(1, n + 1):if is_prime(num):primes.append(num)return primes# 获取用户输入n = int(input("请输入一个整数n:")) # 生成并输出素数primes = generate_primes(n)print("1到{}之间的所有素数为:".format(n))for prime in primes:print(prime)这个Python程序首先定义了一个is_prime函数,用于判断一个数是否为素数。
然后,generate_primes函数使用is_prime函数来生成1到n之间的所有素数。
程序通过input函数获取用户输入的整数n,然后调用generate_primes函数生成素数并输出。
注意,此示例中的正文部分并没有包含生成的文本,只有代码和说明。
蓝桥杯所有题目
1.A+B问题问题描述输入A、B,输出A+B。
说明:在“问题描述”这部分,会给出试题的意思,以及所要求的目标。
输入格式输入的第一行包括两个整数,由空格分隔,分别表示A、B。
输出格式输出一行,包括一个整数,表示A+B的值。
样例输入12 45样例输出57数据规模与约定-10000 <= A, B <= 10000。
2.序列求和问题描述求1+2+3+...+n的值。
输入格式输入包括一个整数n。
输出格式输出一行,包括一个整数,表示1+2+3+...+n的值。
样例输入4样例输出10样例输入100样例输出5050数据规模与约定1 <= n <= 1,000,000,0003.圆的面积问题描述给定圆的半径r,求圆的面积。
输入格式输入包含一个整数r,表示圆的半径。
输出格式输出一行,包含一个实数,四舍五入保留小数点后7位,表示圆的面积。
样例输入4样例输出50.2654825数据规模与约定1 <= r <= 10000。
提示本题对精度要求较高,请注意π的值应该取较精确的值。
你可以使用常量来表示π,比如PI=3.14159265358979323,也可以使用数学公式来求π,比如PI=atan(1.0)*4。
4.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。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一题煤球数目有一堆煤球,堆成三角棱锥形。
具体:第一层放1个,第二层3个(排列成三角形),第三层6个(排列成三角形),第四层10个(排列成三角形),....如果一共有100层,共有多少个煤球?请填表示煤球总数目的数字。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
这道题坑死了,第一次看堆成三角棱锥形,草稿本画半天都没画出个三角棱锥。
后来单独看每句话才知道每层一个三角形叠起来就是三角棱锥。
我去。
看懂题目这个题目就很简单了,每层的个数是上层的个数加上层数,意思就是An = An-1 + n,然而题目是求的前100层一共多少煤球。
所以是Sn.代码双重for循环就出来了。
答案是:1717001.#include<stdio.h>2.int main()3.{4.int a[101] ={0};5.for(int i = 1 ; i < 101 ; i ++)6.a[i] = a[i-1] + i;7.int ans = 0;8.for(int j = 1 ; j < 101 ; j ++)9.ans += a[j];10.printf("%d\n",ans);11.return0;12.}第二题:生日蜡烛某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。
现在算起来,他一共吹熄了236根蜡烛。
请问,他从多少岁开始过生日party的?请填写他开始过生日party的年龄数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
呵呵,水题,但是出题人不严谨啊!!!怎么就不能考虑万一他今年236岁呢....好了不说了强迫症犯了。
蓝桥杯这种不像acm的题目的,能暴力直接暴力。
不用想太多。
直接从1~236 枚举 start, end 分别表示他开始过生日的年龄和今年的年龄,然后计算之间吹蜡烛的总和如果等于236就输出start ,end. 答案是:261.#include<stdio.h>2.int main()3.{4.int start,end;5.for(start = 1 ; start < 236 ; start ++)6.{7.for( end = start ; end < 236 ; end ++ )8.{9.int sum = 0;10.for(int i = start; i <= end; i ++)11.sum += i;12.if( sum == 236)13.{14.printf("start : %d end : %d\n",start,end);15.}16.}17.}18.return0;19.}第三题:凑算式B DEFA + — + -——— = 10C GHI(如果显示有问题,可以参见【图1.jpg】)这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。
比如:6+8/3+952/714 就是一种解法,5+3/1+972/486 是另一种解法。
这个算式一共有多少种解法?注意:你提交应该是个整数,不要填写任何多余的内容或说明性文字。
这个题不多说了,直接暴力生成9的全排列然后去验证等式是否成立,只是验证的时候如果防止精度问题可以通分把除法变成乘法。
答案是:291.#include<stdio.h>2.int ans = 0;3.int num[10];4.bool visit[10];5.6.void Solve()7.{8.double sum = num[0] + (double)num[1] / num[2] + (double)(num[3]*100+num[4]*10+num[5])/(num[6]*100+num[7]*10+num[8]);9.if(sum == 10)10.{11.ans ++;12.}13.}14.15.void dfs(int index)16.{17.if(index == 9)18.{19.Solve();20.return;21.}22.for(int i = 1 ; i < 10 ; i ++)23.{24.if(!visit[i])25.{26.visit[i] = true;27.num[index] = i;28.dfs(index+1);29.visit[i] = false;30.}31.}32.}33.34.int main()35.{36.dfs(0);37.printf("%d\n",ans);38.return0;39.}第四题:快速排序排序在各种场合经常被用到。
快速排序是十分常用的高效率的算法。
其思想是:先选一个“标尺”,用它把整个队列过一遍筛子,以保证:其左边的元素都不大于它,其右边的元素都不小于它。
这样,排序问题就被分割为两个子区间。
再分别对子区间排序就可以了。
下面的代码是一种实现,请分析并填写划线部分缺少的代码。
#include <stdio.h>void swap(int a[], int i, int j){int t = a[i];a[i] = a[j];a[j] = t;}int partition(int a[], int p, int r){int i = p;int j = r + 1;int x = a[p];while(1){while(i<r && a[++i]<x);while(a[--j]>x);if(i>=j) break;swap(a,i,j);}______________________;return j;}void quicksort(int a[], int p, int r){if(p<r){int q = partition(a,p,r);quicksort(a,p,q-1);quicksort(a,q+1,r);}}int main(){int i;int a[] = {5,13,6,24,2,8,19,27,6,12,1,17}; int N = 12;quicksort(a, 0, N-1);for(i=0; i<N; i++) printf("%d ", a[i]);printf("\n");return 0;}注意:只填写缺少的内容,不要书写任何题面已有代码或说明性文字。
这个题目如果接触过快排,了解过快速排序的原理的应该是送分题目,只不过快排单步(就是将一堆数按照某个数作为基准数分成左右两堆)这个实现方式有几种代码表现。
在这里答案是swap(a,p,j).第五题:抽签X星球要派出一个5人组成的观察团前往W星。
其中:A国最多可以派出4人。
B国最多可以派出2人。
C国最多可以派出2人。
....那么最终派往W星的观察团会有多少种国别的不同组合呢?下面的程序解决了这个问题。
数组a[] 中既是每个国家可以派出的最多的名额。
程序执行结果为:DEFFFCEFFFCDFFFCDEFFCCFFFCCEFFCCDFFCCDEFBEFFFBDFFFBDEFFBCFFFBCEFFBCDFFBCDEF....(以下省略,总共101行) #include <stdio.h>#define N 6#define M 5#define BUF 1024void f(int a[], int k, int m, char b[]) {int i,j;if(k==N){b[M] = 0;if(m==0) printf("%s\n",b);return;}for(i=0; i<=a[k]; i++){for(j=0; j<i; j++) b[M-m+j] = k+'A';______________________; //填空位置}}int main(){int a[N] = {4,2,2,1,1,3};char b[BUF];f(a,0,M,b);return 0;}仔细阅读代码,填写划线部分缺少的内容。
注意:不要填写任何已有内容或说明性文字。
这个题目是这样的,对于f(int a[],int k,int m,char b[]).a[] 是每个国家的最多指派人数,k 表示当前是哪个国家,m表示还需要派送几个人(可以为负数).b表示已经派送的人的字符串。
所以这个题目在递归中间的的第一个循环表示从0~a[i]中让i国选择指派人数,内循环只是向b[]记录的过程。
所以答案是f(a,k+1,m-i,b). 因为这里I = j .应该f(a,k+1,m-j,b)也可以。
第六题:方格填数如下的10个格子(如果显示有问题,也可以参看【图1.jpg】)填入0~9的数字。
要求:连续的两个数字不能相邻。
(左右、上下、对角都算相邻)一共有多少种可能的填数方案?请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
这个题目题目有点表述不明,不知道0~9 可不可以重复使用。
我当时做的时候是当作不可以重复使用来处理的。
那么这里我就先当作不可重复使用来讲解。
这里题目还是一样先往里面填数。
用生成排列的形式。
填写完了之后再判断是否可行。
答案是:15801.#include <stdio.h>2.#include <math.h>3.int flag[3][4]; //表示哪些可以填数4.int mpt[3][4]; //填数5.bool visit[10];6.int ans = 0;7.void init() //初始化8.{9.int i,j;10.for(i = 0 ; i < 3 ; i ++)11.for(j = 0 ; j < 4 ; j ++)12.flag[i][j] = 1;13.flag[0][0] = 0;14.flag[2][3] = 0;15.}17.void Solve()18.{19.int dir[8][2] = { 0,1,0,-1,1,0,-1,0,1,1,1,-1,-1,1,-1,-1};20.int book = true;21.for(int i = 0 ; i < 3 ; i ++)22.{23.for(int j = 0 ; j < 4; j ++)24.{25.//判断每个数周围是否满足26.if(flag[i][j] == 0)continue;27.for( int k = 0 ; k < 8 ; k ++)28.{29.int x,y;30.x = i + dir[k][0];31.y = j + dir[k][1];32.if(x < 0 || x >= 3 || y < 0 || y >= 4 || flag[x][y] == 0) continue;33.if(abs(mpt[x][y] - mpt[i][j]) == 1)book = false;34.}35.}36.}37.if(book) ans ++;38.}40.41.void dfs(int index)42.{43.int x,y;44.x = index / 4;45.y = index % 4;46.if( x == 3)47.{48.Solve();49.return;50.}51.if(flag[x][y])52.{53.for(int i = 0 ; i < 10 ; i ++)54.{55.if(!visit[i])56.{57.visit[i] = true;58.mpt[x][y] = i;59.dfs(index+1);60.visit[i] = false;61.}62.}63.}64.else65.{66.dfs(index+1);67.}68.}69.int main()70.{71.init();72.dfs(0);73.printf("%d\n",ans);74.return0;75.}第七题:剪邮票如【图1】, 有12张连在一起的12生肖的邮票。