第七届蓝桥杯程序设计大赛题目及答案

合集下载

蓝桥杯第七届cc初赛试题及答案

蓝桥杯第七届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语言中指针和引用的区别。

第七届蓝桥杯javaB组真题解析-生日蜡烛(第二题)

第七届蓝桥杯javaB组真题解析-生日蜡烛(第二题)

第七届蓝桥杯javaB组真题解析-⽣⽇蜡烛(第⼆题)题⽬/*⽣⽇蜡烛某君从某年开始每年都举办⼀次⽣⽇party,并且每次都要吹熄与年龄相同根数的蜡烛。

现在算起来,他⼀共吹熄了236根蜡烛。

请问,他从多少岁开始过⽣⽇party的?请填写他开始过⽣⽇party的年龄数。

注意:你提交的应该是⼀个整数,不要填写任何多余的内容或说明性⽂字。

*/答案26代码1public class Main {2public static void main(String[] args) {3//从1岁开始试,到100岁截⾄4for(int i=1;i<100;i++){5boolean is=false; //判断是否得到结果,是跳出,否继续循环6int s=i,n=i; //s 从第i年开始计算⽣⽇共吹熄的蜡烛数,n每⼀年要吹熄的蜡烛数7while(true){8if(s==236){//总数等于236 则说明是从第i年开始计算的9 System.out.println(i+"-"+n);//结果输出从第i年开始到现在n年10 is = true;11break;12 }13if(s>236) //如果总数⼤于236 则说明不是从第i年开始计算的14break;15//否则继续叠加这个代码放在if前⾯也可以因为由题⽬可以看出肯定不会是只过了⼀年⽣⽇16 n++; //下⼀年要吹熄的蜡烛数17 s +=n;//继续累计吹熄的蜡烛数18 }19if(is)20break;21 }22 }23 }解析可以尽量⽤代码思想来考虑,循环试出来,⽽不⽤考虑到数学问题上去,这样会提升代码的逻辑难度,容易出错。

第七届蓝桥杯Java B组省赛答案

第七届蓝桥杯Java B组省赛答案

package com.diqijie.shengsai;/*** @author leibaobao* 煤球数目* 解:100层为1+2+3....+100 = 5050*/publicclass _1 {publicstaticvoid main(String[] args) { // TODO Auto-generated method stubint sum = 0;for(int i = 1; i <= 100; i++){for(int j = 1; j <= i; j++)sum += j;}System.out.println(sum);}}package com.diqijie.shengsai;/*** @author leibaobao* 生日蜡烛* 解:人最大也不过100岁,不要想太多。

暴力一点 */publicclass _2 {publicstaticvoid main(String[] args) { // TODO Auto-generated method stubint sum = 0;for(int i = 0; i < 100; i++){for(int j = i; j < 100; j++){sum += j;if(sum == 236)System.out.println(i);}sum = 0;}} }package com.diqijie.shengsai;import java.util.HashSet;/*** @author leibaobao* 凑算式* 解:前几题不要多想,暴力一点。

但是Java能不用大数不要去用大数* 麻烦,慢。

这题通分加for循环不就OK了吗*/publicclass _3 {publicstaticvoid main(String[] args) {// TODO Auto-generated method stubint count = 0;for(int a = 1; a < 10; a++)for(int b = 1; b < 10; b++)for(int c = 1; c < 10; c++)for(int d = 1; d < 10; d++)for(int e = 1; e < 10; e++)for(int f = 1; f < 10; f++)for(int g = 1; g < 10; g++)for(int h = 1; h < 10; h++)for(int i = 1; i < 10; i++){if(a!=b&&a!=c&&a!=d&&a!=e&&a!=f&&a!=g&&a!=h&&a!=i&&b!=c&&b!=d&&b!=e&&b!=f&&b!=g&&b!=h&&b!=i&&c!=d&&c!=e&&c!=f&&c!=g&&c!=h&&c!=i&&d!=e&&d!=f&&d!=g&&d!=h&&d!=i&&e!=f&&e!=g&&e!=h&&e!=i&&f!=g&&f!=h&&f!=i&&g!=h&&g!=i&&i!=h){int temp_1 = b*(g*100 +h*10 +i);int temp_2 = c*(d*100+e*10+f);int temp_3 = c*(g*100 +h*10 +i);if((temp_1+temp_2)%temp_3 == 0)if(a + (temp_1+temp_2)/temp_3 == 10){count++;}}}System.out.println(count);}}package com.diqijie.shengsai;/*** @author leibaobao 分小组解:这个读懂即可*/publicclass _4 {publicstatic String remain(int[] a) {String s = "";for (int i = 0; i < a.length; i++) {if (a[i] == 0)s += (char) (i + 'A');}return s;}publicstaticvoid f(String s, int[] a) {for (int i = 0; i < a.length; i++) {if (a[i] == 1)continue;a[i] = 1;for (int j = i + 1; j < a.length; j++) {if (a[j] == 1)continue;a[j] = 1;for (int k = j + 1; k < a.length; k++) {if (a[k] == 1)continue;a[k] = 1;System.out.println(s+""+(char) (i + 'A')+ (char) (j + 'A') + (char) (k + 'A') +""+ remain(a)); // 填空位置a[k] = 0;}a[j] = 0;}a[i] = 0;}}publicstaticvoid main(String[] args) {int[] a = newint[9];a[0] = 1;for (int b = 1; b < a.length; b++) {a[b] = 1;for (int c = b + 1; c < a.length; c++) {a[c] = 1;String s = "A" + (char) (b + 'A') + (char) (c + 'A');f(s, a);a[c] = 0;}a[b] = 0;}}}/*** @author leibaobao 抽签* 解:填代码题读懂即可,dfs*/publicclass _5 {publicstaticvoid f(int[] a, int k, int n, String s) { if (k == a.length) {if (n == 0)System.out.println(s);return;}String s2 = s;for (int i = 0; i <= a[k]; i++) {f(a,k+1,5-s2.length(),s2);s2 += (char) (k + 'A');}}publicstaticvoid main(String[] args) {int[] a = { 4, 2, 2, 1, 1, 3 };f(a, 0, 5, "");}}/*** @author leibaobao 抽签* 解:填代码题读懂即可,dfs*/publicclass _5 {publicstaticvoid f(int[] a, int k, int n, String s) { if (k == a.length) {if (n == 0)System.out.println(s);return;}String s2 = s;for (int i = 0; i <= a[k]; i++) {f(a,k+1,5-s2.length(),s2);s2 += (char) (k + 'A');}}publicstaticvoid main(String[] args) {int[] a = { 4, 2, 2, 1, 1, 3 };f(a, 0, 5, "");}}package com.diqijie.shengsai;import java.util.Arrays;import java.util.HashSet;import java.util.Iterator;/*** @author leibaobao 剪邮票* 解:深搜,效率不是很高,反正是填空题*/public class _7 {public static int count = 0;public static int [] a = new int[5];public static HashSet<String> hashset = new HashSet<String>();public static void main(String[] args) {// TODO Auto-generated method stubfor(a[0] = 0; a[0] < 12; a[0]++)for(a[1] = a[0]+1; a[1] < 12; a[1]++)for(a[2] = a[1]+1; a[2] < 12; a[2]++)for(a[3] = a[2]+1; a[3] < 12; a[3]++)for(a[4] = a[3]+1; a[4] < 12; a[4]++)if(jus()){hashset.add(""+a[0]+a[1]+a[2]+a[3]+a[4]);}System.out.println(hashset.size());}private static boolean jus() {// TODO Auto-generated method stubboolean flag[] = new boolean[5];dfs(flag,0);return flag[0]&&flag[1]&&flag[2]&&flag[3]&&flag[4];}private static void dfs(boolean[] flag,int n) {// TODO Auto-generated method stubflag[n] = true;for(int i = 0; i < 5; i++){//加一减一要在同一行、加四减四要在同一列if(!flag[i] && (a[i]/4 == a[n]/4) && (a[i] == a[n] - 1 || a[i] == a[n] + 1)){dfs(flag,i);}if (!flag[i] && (a[i]%4 == a[n]%4) && (a[i] == a[n] - 4 || a[i] == a[n] + 4)){dfs(flag,i);}}}}package com.diqijie.shengsai;import java.util.Scanner;/*** @author leibaobao* 四平方和* 解:哎,这题我超级无语。

java算法第七届蓝桥杯B组(题+答案)9.取球博弈

java算法第七届蓝桥杯B组(题+答案)9.取球博弈

java算法第七届蓝桥杯B组(题+答案)9.取球博弈9.取球博弈 (程序设计)两个⼈玩取球的游戏。

⼀共有N个球,每⼈轮流取球,每次可取集合{n1,n2,n3}中的任何⼀个数⽬。

如果⽆法继续取球,则游戏结束。

此时,持有奇数个球的⼀⽅获胜。

如果两⼈都是奇数,则为平局。

假设双⽅都采⽤最聪明的取法,第⼀个取球的⼈⼀定能赢吗?试编程解决这个问题。

输⼊格式:第⼀⾏3个正整数n1 n2 n3,空格分开,表⽰每次可取的数⽬ (0<n1,n2,n3<100)第⼆⾏5个正整数x1 x2 ... x5,空格分开,表⽰5局的初始球数(0<xi<1000)输出格式:⼀⾏5个字符,空格分开。

分别表⽰每局先取球的⼈能否获胜。

能获胜则输出+,次之,如有办法逼平对⼿,输出0,⽆论如何都会输,则输出-例如,输⼊:1 2 31 2 3 4 5程序应该输出:+ 0 + 0 -再例如,输⼊:1 4 510 11 12 13 15程序应该输出:0 - 0 + +再例如,输⼊:2 3 57 8 9 10 11程序应该输出:+ 0 0 0 0资源约定:峰值内存消耗(含虚拟机) < 256MCPU消耗 < 3000ms1 import java.util.Scanner;23 public class _9取球博弈 {4 public static int [] n = new int[3];5 public static int [] init = new int[5];6 public static int [] end = new int[1000];7 public static char [] sign = {'-','0','0','+'};8 public static void main(String [] args){9 Scanner scan = new Scanner(System.in);10 for(int i = 0; i < 3; i++){11 n[i] = scan.nextInt();12 }13 int Min = Math.min(n[0], Math.min(n[1], n[2]));14 for(int i = 0; i < 5; i++){15 init[i] = scan.nextInt();16 }17 for(int i = 0; i < Min; i++){18 end[i] = 2;19 }20 for(int i = Min; i < end.length; i++){21 int temp = 0;22 for(int j =0; j < 3; j++){23 if(i - n[j] < 0)24 continue;25 else if(end[i-n[j]] == 3){26 if(n[j]%2 != 0)27 temp = 1 > temp ? 1 : temp;28 }29 else if(end[i-n[j]] == 0){30 if(n[j]%2 == 0)31 temp = 3;32 else33 temp = 2 > temp ? 2 : temp;34 }35 else if(end[i-n[j]] == 2){36 if(n[j]%2==0)37 temp = 2 > temp ? 2 : temp;38 else39 temp = 3;40 }41 else if(end[i-n[j]] == 1){42 if(n[j]%2==0)43 temp = 1 > temp ? 1 : temp;44 }45 }46 end[i] = temp;47 }48 for(int i = 0; i < 5; i++){49 System.out.print(sign[end[init[i]]]+" ");50 }51 }52 }(参考⽹上的,没有思路0.0)。

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

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

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), 表示蚂蚁的总数。

蓝桥杯python题库及答案

蓝桥杯python题库及答案

蓝桥杯python题库及答案蓝桥杯python题库及答案一、选择题第一题设s=“Hello Lan Qiao”,执行print(s[4:11])输出的结果为( )。

选择题严禁使用程序验证A、lo Lan QiB、lo Lan QC、o Lan QiD、o Lan Q第二题循环语句for i in range(8, -4, -2):执行了几次循环( )。

选择题严禁使用程序验证A、4B、5C、6D、7第三题导入random模块后,执行print(random.randrange(10,100,2))语句,输出的结果可能是( )。

选择题严禁使用程序验证A、1B、24C、63D、100第四题执行以下程序,输出的结果是( )。

选择题严禁使用程序验证height = {“小蓝”:80, “小青”:100, “小圃”:70}height[“小青”]=70print(sum(height.values()))A、220B、210C、250D、70第五题导入turtle模块后,执行turtle.circle(80,steps=6)语句,所绘制的图形以下说法正确的是( )。

选择题严禁使用程序验证A、绘制出一个半径为80像素的圆B、绘制出六个半径为80像素的圆C、绘制出一个半径为80像素的圆和一个六边形D、绘制出一个半径为80像素的圆内接正六边形二、编程题第一题(注:input()输入函数的括号中不允许添加任何信息)编程实现:给定一个正整数N,计算N除以7的商。

输入描述:输入一个正整数N输出描述:输出N除以7的商(商为整数)样例输入:8样例输出:1num = int(input())print(num % 7)第二题(注:input()输入函数的括号中不允许添加任何信息)编程实现:给定一个正整数N,计算出1到N之间所有奇数的和。

输入描述:输入一个正整数N输出描述:输出1到N之间(包含1和N)所有奇数的和样例输入:5样例输出:9N = int(input())Sum = 0for i in range(1, N+1,2):Sum += iprint(Sum)第三题(注:input()输入函数的括号中不允许添加任何信息)提示信息:“水仙花数”是指一个三位正整数,其各位数字立方的和等于该数本身。

蓝桥杯试题及答案

蓝桥杯试题及答案

蓝桥杯试题及答案一、选择题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)比使用数组更有效,并解释原因。

第七届蓝桥杯省赛a组试题及答案

第七届蓝桥杯省赛a组试题及答案

第七届蓝桥杯省赛a组试题及答案第七届蓝桥杯省赛A组试题及答案1. 选择题- 1.1 以下哪个选项是Java中的数据类型?A. BooleanB. StringC. IntegerD. All of the above- 答案:D- 1.2 在C++中,用于定义一个类的方法是什么关键字?A. classB. structC. functionD. method- 答案:A2. 填空题- 2.1 在Python中,用于定义函数的关键字是____。

- 答案:def- 2.2 在JavaScript中,用于声明变量的关键字是____。

- 答案:var3. 编程题- 3.1 编写一个函数,计算并返回从1到n的整数之和。

- 答案:```pythondef sum_n(n):return sum(range(1, n+1))```- 3.2 编写一个程序,实现一个简单的计算器,可以进行加、减、乘、除操作。

- 答案:```pythondef calculator(a, b, operation):if operation == '+':return a + belif operation == '-':return a - belif operation == '*':return a * belif operation == '/':return a / b if b != 0 else 'Error: Division by zero'```4. 简答题- 4.1 解释什么是面向对象编程(OOP)?- 答案:面向对象编程(OOP)是一种编程范式,它使用“对象”来设计应用程序和程序。

对象是现实世界中事物的抽象,它们具有属性(数据)和方法(功能)。

- 4.2 描述一下什么是递归函数?- 答案:递归函数是一个调用自身的函数,它允许函数在执行过程中调用自己。

蓝桥杯考试题及答案

蓝桥杯考试题及答案

蓝桥杯考试题及答案一、单项选择题(每题2分,共10题)1. 以下哪个不是计算机编程语言?A. PythonB. JavaC. C++D. English答案:D2. 在HTML中,用于定义最重要的标题的标签是?A. `<h1>`B. `<h6>`C. `<head>`D. `<body>`答案:A3. 在数据库中,用于删除表中数据的SQL命令是?A. DELETEB. DROPC. INSERTD. UPDATE答案:A4. 哪种数据结构允许在两端进行插入和删除操作?A. 栈B. 队列C. 链表D. 数组答案:C5. 在计算机科学中,二进制数“1010”转换为十进制数是多少?A. 8B. 10C. 12D. 14答案:B6. 以下哪个选项不是面向对象编程的特性?A. 封装B. 继承C. 多态D. 过程化答案:D7. 在JavaScript中,用于定义函数的关键字是?A. functionB. varC. letD. const答案:A8. 在Unix/Linux系统中,查看当前目录下的文件和文件夹的命令是?A. lsB. pwdC. cdD. mkdir答案:A9. 以下哪个算法不是排序算法?A. 快速排序B. 归并排序C. 深度优先搜索D. 堆排序答案:C10. 在计算机图形学中,3D图形渲染中常用的坐标系统是?A. 笛卡尔坐标系B. 极坐标系C. 柱面坐标系D. 球面坐标系答案:A二、填空题(每题2分,共5题)1. 在Python中,用于创建空列表的语法是____。

答案:[]2. 在HTML中,用于创建超链接的标签是____。

答案:<a>3. SQL查询语句中,用于选择所有列的关键字是____。

答案:*4. 在计算机科学中,一个算法的时间复杂度通常用____表示。

答案:大O符号5. 在JavaScript中,用于获取元素的CSS样式的属性是____。

java算法第七届蓝桥杯B组(题+答案)7.剪邮票

java算法第七届蓝桥杯B组(题+答案)7.剪邮票

java算法第七届蓝桥杯B组(题+答案)7.剪邮票7.剪邮票 (结果填空)如【图1.jpg】, 有12张连在⼀起的12⽣肖的邮票。

现在你要从中剪下5张来,要求必须是连着的。

(仅仅连接⼀个⾓不算相连)⽐如,【图2.jpg】,【图3.jpg】中,粉红⾊所⽰部分就是合格的剪取。

请你计算,⼀共有多少种不同的剪取⽅法。

请填写表⽰⽅案数⽬的整数。

注意:你提交的应该是⼀个整数,不要填写任何多余的内容或说明性⽂字。

思路:感觉还是先排列,从12个邮票中选5个出来,然后对每个邮票搜索,同⼀⾏,同⼀列,则表⽰连接到,如果连接到就定义该块邮票被访问过,最后判断5个邮票是否都被访问过,是就说明是连通的,但是这个不是全排列,应该是从12个选5个出来从12个选5个。

判断5个是否相连,符合⼀个visit设为true,五个true,count++(这个题没弄懂,参考⽹上的)1 public class _7剪邮票 {2 static int a[] = new int[5];3 public static void main(String[] args) {4 int count = 0;5 for (a[0] = 0; a[0] < 12; a[0]++) {6 for (a[1] = a[0] + 1; a[1] < 12; a[1]++) {7 for (a[2] = a[1] +1 ; a[2] < 12; a[2]++) {8 for (a[3] = a[2]+1; a[3] < 12; a[3]++) {9 for (a[4] = a[3]+1; a[4] < 12; a[4]++) {10 if (judge()) {11 count++;12 }13 }14 }15 }16 }17 }18 System.out.println(count);19 }20 private static boolean judge() {21 boolean visit[] = new boolean[5];22 dfs(visit,0);23 return visit[0]&&visit[1]&&visit[2]&&visit[3]&&visit[4];24 }2526 private static void dfs(boolean[] visit, int i) {27 visit[i] = true;28 for (int j = 0; j < visit.length; j++) {29 if (!visit[j]&&(a[i]/4==a[j]/4)&&(a[i]==a[j]+1||a[i]==a[j]-1)) {30 dfs(visit, j);31 }32 if (!visit[j]&&(a[i]==a[j]+4||a[i]==a[j]-4)) {33 dfs(visit, j);34 }35 }36 }37 }运⾏结果:116。

第七届蓝桥杯省赛c语言试题及答案

第七届蓝桥杯省赛c语言试题及答案

第七届蓝桥杯省赛c语言试题及答案第七届蓝桥杯省赛C语言试题及答案1. 题目一:计算圆的面积要求:编写一个程序,输入圆的半径,计算并输出圆的面积。

答案:```c#include <stdio.h>#define PI 3.14159int main() {float radius, area;printf("请输入圆的半径: ");scanf("%f", &radius);area = PI * radius * radius;printf("圆的面积是: %.2f\n", area);return 0;}```2. 题目二:字符串反转要求:编写一个函数,实现字符串的反转。

答案:```c#include <stdio.h>#include <string.h>void reverseString(char *str) {int i, j;char temp;for(i = 0, j = strlen(str) - 1; i < j; i++, j--) {temp = str[i];str[i] = str[j];str[j] = temp;}}int main() {char str[100];printf("请输入一个字符串: ");scanf("%s", str);reverseString(str);printf("反转后的字符串是: %s\n", str);return 0;}```3. 题目三:寻找最大值要求:编写一个程序,输入10个整数,找出并输出其中的最大值。

答案:```c#include <stdio.h>int main() {int numbers[10], max;printf("请输入10个整数:\n");for(int i = 0; i < 10; i++) {scanf("%d", &numbers[i]);}max = numbers[0];for(int i = 1; i < 10; i++) {if(numbers[i] > max) {max = numbers[i];}}printf("最大值是: %d\n", max);return 0;}```4. 题目四:计算阶乘要求:编写一个函数,计算并返回一个整数的阶乘。

蓝桥杯python语言试题及答案

蓝桥杯python语言试题及答案

蓝桥杯python语言试题及答案蓝桥杯Python语言试题及答案1. 题目:编写一个Python函数,计算给定列表中所有数字的和。

答案:```pythondef sum_of_list(numbers):return sum(numbers)```2. 题目:编写一个Python函数,判断给定字符串是否为回文。

答案:```pythondef is_palindrome(s):return s == s[::-1]```3. 题目:给定一个整数数组,请编写一个Python函数,找出数组中第二大的数。

答案:```pythondef second_largest(numbers):unique_numbers = set(numbers)if len(unique_numbers) < 2:return Noneunique_numbers = sorted(unique_numbers, reverse=True)return unique_numbers[1]```4. 题目:编写一个Python函数,实现字符串的反转。

答案:```pythondef reverse_string(s):return s[::-1]```5. 题目:给定一个整数n,请编写一个Python函数,返回n的阶乘。

答案:```pythondef factorial(n):if n == 0:return 1else:return n * factorial(n - 1)```6. 题目:编写一个Python函数,实现斐波那契数列的第n项。

答案:```pythondef fibonacci(n):if n <= 0:return 0elif n == 1:return 1else:return fibonacci(n - 1) + fibonacci(n - 2)```7. 题目:编写一个Python函数,检查一个整数是否为素数。

第七届蓝桥杯程序设计大赛题目及答案

第七届蓝桥杯程序设计大赛题目及答案

第七届省赛1. 网友年龄某君新认识一网友。

当问及年龄时,他的网友说:“我的年龄是个2 位数,我比儿子大27 岁, 如果把我的年龄的两位数字交换位置,刚好就是我儿子的年龄”请你计算:网友的年龄一共有多少种可能情况?提示:30 岁就是其中一种可能哦.请填写表示可能情况的种数。

注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

7x-y=32. 生日蜡烛某君从某年开始每年都举办一次生日party ,并且每次都要吹熄与年龄相同根数的蜡烛现在算起来,他一共吹熄了236 根蜡烛。

请问,他从多少岁开始过生日party 的?请填写他开始过生日party 的年龄数。

注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

26 #include<iostream> using namespace std;int main(){int i,j;int sum=0; for(i=1;i<=100;i++){ // 年龄sum=0; for(j=i;j<=100;j++){ // 蜡烛数sum=sum+j;if(sum==236){ cout<<i<<endl;break;}}}}3. 方格填数如下的10 个格子填入0~9 的数字。

要求:连续的两个数字不能相邻。

(左右、上下、对角都算相邻) 一共有多少种可能的填数方案?请填写表示方案数目的整数。

注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

// 用dfs 求#include<iostream> #include<cstring> #include<cmath> using namespace std;const int maxn=4;int mp[maxn][maxn];int flag[10];int ans=0;int init() {memset(mp,-10, sizeof mp); memset(flag,0, sizeof flag);}int fx[4]= {0,-1,-1,-1},fy[4]= {-1,-1,0,1};int check(int i,int j) {for(int f=0; f<4; f++) {if(abs(mp[i][j]-mp[i+fx[f]][j+fy[f]])!=1||i+fx[f]<1||j+fy[f]>4||j+fy[f]<1 ) continue;elsereturn 0;}return 1;}void dfs(int i,int j) {if(i==3&&j==4) {ans++;return ;}for(int num=0; num<=9; num++) {if(!flag[num]) { mp[i][j]=num; flag[num]=1; if(check(i,j)) if(j==4) dfs(i+1,1);elsedfs(i,j+1); flag[num]=0;}}}int main() {init();dfs(1,2);cout<<ans;}// 暴力求解#include <iostream>using namespace std;int ans=0;void swap(int *a,int *b){int *c;c=a;a=b;b=c;}int f(int a[])// 判断这种排列组合是否符合题意{if(a[0]-a[4]==-1||a[0]-a[4]==1) return 0;if(a[3]-a[4]==-1||a[3]-a[4]==1) return 0;if(a[5]-a[4]==-1||a[5]-a[4]==1) return 0;if(a[7]-a[4]==-1||a[7]-a[4]==1)return 0;if(a[8]-a[4]==-1||a[8]-a[4]==1)return 0;if(a[9]-a[4]==-1||a[9]-a[4]==1)return 0;if(a[1]-a[4]==-1||a[1]-a[4]==1)return 0;if(a[1]-a[5]==-1||a[1]-a[5]==1)return 0;if(a[1]-a[6]==-1||a[1]-a[6]==1)return 0;if(a[0]-a[5]==-1||a[0]-a[5]==1)return 0;if(a[2]-a[5]==-1||a[2]-a[5]==1)return 0;if(a[8]-a[5]==-1||a[8]-a[5]==1)return 0;if(a[9]-a[5]==-1||a[9]-a[5]==1)return 0;if(a[6]-a[5]==-1||a[6]-a[5]==1)return 0;if(a[6]-a[9]==-1||a[6]-a[9]==1)return 0;if(a[6]-a[2]==-1||a[6]-a[2]==1)return 0;if(a[3]-a[0]==-1||a[3]-a[0]==1)return 0;if(a[3]-a[7]==-1||a[3]-a[7]==1)return 0;if(a[8]-a[7]==-1||a[8]-a[7]==1)return 0;if(a[8]-a[3]==-1||a[8]-a[3]==1)return 0;if(a[9]-a[8]==-1||a[9]-a[8]==1)return 0;if(a[1]-a[0]==-1||a[1]-a[0]==1)return 0;if(a[1]-a[2]==-1||a[1]-a[2]==1)return 0;}void perm(int a[],int m,int len)//列举出0-9 所有的组合进行判断{if(m==len-1){if(f(a)) ans++;return ;}for(int i=m;i<len;i++){swap(a[m],a[i]); perm(a,m+1,len); swap(a[m],a[i]);} } int main() {int a[10] = {0,1,2,3,4,5,6,7,8,9}; perm(a,0,10);cout<<ans<<endl; return 0;}4. 快速排序排序在各种场合经常被用到。

第1-7届蓝桥杯决赛试题及答案

第1-7届蓝桥杯决赛试题及答案

第1-7届蓝桥杯决赛试题及答案2011年第1届蓝桥杯决赛试题及答案1.四方定理数论中有著名的四方定理:所有自然数至多只要用四个数的平方和就可以表示。

我们可以通过计算机验证其在有限范围的正确性。

对于大数,简单的循环嵌套是不适宜的。

下面的代码给出了一种分解方案。

请仔细阅读,填写空缺的代码(下划线部分)。

注意:请把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中即可。

直接写在题面中不能得分。

int f(int n, int a[], int idx){if(______________) return 1; // 填空1if(idx==4) return 0;for(int i=(int)sqrt(n); i>=1; i--){a[idx] = i;if(_______________________)return 1; // 填空2}return 0;}int main(int argc, char* argv[]){for(;;){int number;printf("输入整数(1~10亿):");scanf("%d",&number);int a[] = {0,0,0,0};int r = f(number, a, 0);printf("%d: %d %d %d %d\n", r, a[0], a[1], a[2], a[3]);}return 0;}2.加密在对文本进行简单加密的时候,可以选择用一个n位的二进制数,对原文进行异或运算。

解密的方法就是再执行一次同样的操作。

加密过程中n位二进制数会循环使用。

并且其长度也可能不是8的整数倍。

下面的代码演示了如何实现该功能。

请仔细阅读,填写空缺的代码(下划线部分)。

注意:请把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中即可。

C语言程序设计竞赛试题参考答案

C语言程序设计竞赛试题参考答案

C语言程序设计竞赛试题参考答案第七届“蓝桥杯”全国软件与信息技术专业人才大赛清远职业技术学院选拔赛《C语言程序设计》参考答案1.标题:年龄巧合(填空题,20分)答案: 19882.标题:海盗分金币(填空题,20分)答案: 31293.标题:啤酒和饮料(填空题,20分)答案: 114.标题:兔子繁殖(程序填空,20分)(1) i=1;i<=38;i++(2) f3=f1+f2(3) f1=f2(1) f2=f35.题目:杨辉三角(编程题 20分)代码如下:#include#includeint main(){int i,j,k,n;static int a[50][50];printf("Input lines\",&n);scanf("%d",&n);a[1][1]=a[2][1]=a[2][2]=1;for(i=3;i<=n;i++)for(j=1;j<=i;j++)a[i][j]=a[i-1][j-1]+a[i-1][j];for(i=1;i<=n;i++){for (k=1;k<=n-i;k++)printf(" ");for(j=1;j<=i;j++)printf("%2d ",a[i][j]);printf("\");}getch();return 1;}1-3题参考代码1、代码如下:#includeint main(void){int a, b, c, d;int age;int year;for(a=0; a<=2; a++){for(b=0; b<=9; b++){for(c=0; c<=9; c++){for(d=0; d<=9; d++){age = a+b+c+d;year = 2014-(a*1000+b*100+c*10+d);if(age == year){printf("%d%d%d%d ",a,b,c,d); }}}}}2、代码如下:#includeint main(void){for(int i=1; i<100000; i++){ int x = i;if((x+1)%5 != 0) continue;x = (x+1)/5 * 4;if((x+1)%5 != 0) continue;x = (x+1)/5 * 4;if((x+1)%5 != 0) continue;x = (x+1)/5 * 4;if((x+1)%5 != 0) continue;x = (x+1)/5 * 4;if((x+1)%5 != 0) continue;x = (x+1)/5 * 4;if(x>=1000 &&x<=1999)printf("%d",i);}return 1;}return 1;}3、代码如下:#includeint main(void){int x,y;for(x=0; x<=100; x++){for(y=0; y<=100; y++){if(23*x + 19*y == 823)if(x<y)< bdsfid="173" p=""></y)<> printf("%d %d\",x, y);}}return 1;}。

第七届蓝桥杯省赛c组试题及答案

第七届蓝桥杯省赛c组试题及答案

第七届蓝桥杯省赛c组试题及答案第七届蓝桥杯省赛C组试题及答案1. 题目一:计算圆周率要求:编写一个程序,使用蒙特卡洛方法计算圆周率π的近似值。

解答:```pythonimport randomdef calculate_pi(num_samples):inside_circle = 0for _ in range(num_samples):x, y = random.random(), random.random()if x*x + y*y <= 1:inside_circle += 1return 4 * inside_circle / num_samplesprint(calculate_pi(1000000))```2. 题目二:字符串反转要求:编写一个函数,实现字符串反转的功能。

解答:```pythondef reverse_string(s):return s[::-1]print(reverse_string("hello"))```3. 题目三:寻找最大子数组和要求:给定一个整数数组,请找出其最大子数组和。

解答:```pythondef max_subarray_sum(nums):max_sum = nums[0]current_sum = nums[0]for num in nums[1:]:current_sum = max(num, current_sum + num)max_sum = max(max_sum, current_sum)return max_sumprint(max_subarray_sum([-2, 1, -3, 4, -1, 2, 1, -5, 4])) ```4. 题目四:判断回文链表要求:给定一个链表,判断其是否为回文结构。

解答:```pythonclass ListNode:def __init__(self, value=0, next=None):self.val = valueself.next = nextdef is_palindrome(head):fast = slow = headprev = Nonewhile fast and fast.next:fast = fast.next.nextnext_node = slow.nextslow.next = prevprev = slowslow = next_nodeif fast:slow = slow.nextleft = headright = prevwhile left and right:if left.val != right.val: return Falseleft = left.nextright = right.nextreturn True# 示例链表构建和调用node1 = ListNode(1)node2 = ListNode(2)node3 = ListNode(2)node4 = ListNode(1)node1.next = node2node2.next = node3node3.next = node4print(is_palindrome(node1))```5. 题目五:二叉树的镜像要求:请完成一个函数,实现二叉树的镜像。

第七届蓝桥杯CCB组题解

第七届蓝桥杯CCB组题解

第一题煤球数目有一堆煤球;堆成三角棱锥形..具体:第一层放1个;第二层3个排列成三角形;第三层6个排列成三角形;第四层10个排列成三角形;....如果一共有100层;共有多少个煤球请填表示煤球总数目的数字..注意:你提交的应该是一个整数;不要填写任何多余的内容或说明性文字..这道题坑死了;第一次看堆成三角棱锥形;草稿本画半天都没画出个三角棱锥..后来单独看每句话才知道每层一个三角形叠起来就是三角棱锥..我去..看懂题目这个题目就很简单了;每层的个数是上层的个数加上层数;意思就是An = An-1 + n;然而题目是求的前100层一共多少煤球..所以是Sn.代码双重for循环就出来了..答案是:1717001.include<stdio.h>2.int main3.{4.int a101 ={0};5.for int i = 1 ; i < 101 ; i ++6. ai = ai-1 + i;7.int ans = 0;8.for int j = 1 ; j < 101 ; j ++9. ans += aj;10. printf"%d\n";ans;11.return 0;12.}第二题:生日蜡烛某君从某年开始每年都举办一次生日party;并且每次都要吹熄与年龄相同根数的蜡烛..现在算起来;他一共吹熄了236根蜡烛..请问;他从多少岁开始过生日party的请填写他开始过生日party的年龄数..注意:你提交的应该是一个整数;不要填写任何多余的内容或说明性文字..呵呵;水题;但是出题人不严谨啊怎么就不能考虑万一他今年236岁呢....好了不说了强迫症犯了..蓝桥杯这种不像acm的题目的;能暴力直接暴力..不用想太多..直接从1~236 枚举 start; end 分别表示他开始过生日的年龄和今年的年龄;然后计算之间吹蜡烛的总和如果等于236就输出start ;end. 答案是:261.include<stdio.h>2.int main3.{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 == 23613. {14. printf"start : %dend : %d\n";start;end;15. }16. }17. }18.return 0;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 num10;4.bool visit10;5.6.void Solve7.{8.double sum = num0 + double num1 / num2 + double num3100+num410+num5/num6100+num710+num8;9.if sum == 1010. {11. ans ++;12. }13.}14.15.void dfs int index16.{17.if index == 918. {19. Solve;20.return ;21. }22.for int i = 1 ; i < 10 ; i ++23. {24.if visiti25. {26. visiti = true;27. numindex = i;28. dfsindex+1;29. visiti = false;30. }31. }32.}33.34.int main35.{36. dfs0;37. printf"%d\n";ans;38.return 0;39.}第四题:快速排序排序在各种场合经常被用到..快速排序是十分常用的高效率的算法..其思想是:先选一个“标尺”;用它把整个队列过一遍筛子;以保证:其左边的元素都不大于它;其右边的元素都不小于它..这样;排序问题就被分割为两个子区间..再分别对子区间排序就可以了..下面的代码是一种实现;请分析并填写划线部分缺少的代码.. include <stdio.h>void swapint a; int i; int j{int t = ai;ai = aj;aj = t;}int partitionint a; int p; int r{int i = p;int j = r + 1;int x = ap;whilei<r && a++i<x;whilea--j>x;ifi>=j break;swapa;i;j;}______________________;return j;}void quicksortint a; int p; int r {ifp<r{int q = partitiona;p;r; quicksorta;p;q-1;quicksorta;q+1;r;}}{int i;int a = {5;13;6;24;2;8;19;27;6;12;1;17};int N = 12;quicksorta; 0; N-1;fori=0; i<N; i++ printf"%d "; ai;printf"\n";return 0;}注意:只填写缺少的内容;不要书写任何题面已有代码或说明性文字..这个题目如果接触过快排;了解过快速排序的原理的应该是送分题目;只不过快排单步就是将一堆数按照某个数作为基准数分成左右两堆这个实现方式有几种代码表现..在这里答案是swapa;p;j.第五题:抽签X星球要派出一个5人组成的观察团前往W星..A国最多可以派出4人..B国最多可以派出2人..C国最多可以派出2人......那么最终派往W星的观察团会有多少种国别的不同组合呢下面的程序解决了这个问题..数组a 中既是每个国家可以派出的最多的名额..程序执行结果为:DEFFFCEFFFCDFFFCDEFFCCFFFCCEFFCCDFFCCDEFBDFFFBDEFFBCFFFBCEFFBCDFFBCDEF....以下省略;总共101行include <stdio.h>define N 6define M 5define BUF 1024void fint a; int k; int m; char b {int i;j;ifk==N{ifm==0 printf"%s\n";b;return;}fori=0; i<=ak; i++{forj=0; j<i; j++ bM-m+j = k+'A';______________________; //填空位置}}int main{int aN = {4;2;2;1;1;3};char bBUF;fa;0;M;b;return 0;}仔细阅读代码;填写划线部分缺少的内容..注意:不要填写任何已有内容或说明性文字..这个题目是这样的;对于fint a;int k;int m;char b.a 是每个国家的最多指派人数;k表示当前是哪个国家;m表示还需要派送几个人可以为负数.b表示已经派送的人的字符串..所以这个题目在递归中间的的第一个循环表示从0~ai中让i国选择指派人数;内循环只是向b记录的过程..所以答案是fa;k+1;m-i;b. 因为这里I = j .应该 fa;k+1;m-j;b 也可以..第六题:方格填数如下的10个格子如果显示有问题;也可以参看图1.jpg填入0~9的数字..要求:连续的两个数字不能相邻..左右、上下、对角都算相邻一共有多少种可能的填数方案请填写表示方案数目的整数..注意:你提交的应该是一个整数;不要填写任何多余的内容或说明性文字..这个题目题目有点表述不明;不知道0~9 可不可以重复使用..我当时做的时候是当作不可以重复使用来处理的..那么这里我就先当作不可重复使用来讲解..这里题目还是一样先往里面填数..用生成排列的形式..填写完了之后再判断是否可行..答案是:15801.include <stdio.h>2.include <math.h>3.int flag34; //表示哪些可以填数4.int mpt34; //填数5.bool visit10;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. flagij = 1;13. flag00 = 0;14. flag23 = 0;15.}16.17.void Solve18.{19.int dir82 ={ 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 flagij == 0continue;27.for int k = 0 ; k < 8 ; k ++28. {29.int x;y;30. x = i + dirk0;31. y = j + dirk1;32.if x < 0 || x >= 3 || y < 0 || y >= 4 || flagxy == 0 continue;33.if absmptxy - mptij == 1 book = false;34. }35. }36. }37.if book ans ++;38.}39.40.41.void dfs int index42.{43.int x;y;44. x = index / 4;45. y = index % 4;46.if x == 347. {48. Solve;49.return;50. }51.if flagxy52. {53.for int i = 0 ; i < 10 ; i ++54. {55.if visiti56. {57. visiti = true;58. mptxy = i;59. dfsindex+1;60. visiti = false;61. }62. }63. }64.else65. {66. dfsindex+1;67. }68.}69.int main70.{71. init;72. dfs0;73. printf"%d\n";ans;74.return 0;75.}第七题:剪邮票如图1; 有12张连在一起的12生肖的邮票..现在你要从中剪下5张来;要求必须是连着的..仅仅连接一个角不算相连比如;图2;图3中;粉红色所示部分就是合格的剪取..请你计算;一共有多少种不同的剪取方法..请填写表示方案数目的整数..注意:你提交的应该是一个整数;不要填写任何多余的内容或说明性文字..其实这个题目还是可前面的一样;先生成;再判断是否可行..这里我们可以先用搜索从12个数里面将所有5个数的组合找出来..然后再用深搜判断这五个是否连在一起..答案是:1161.include <stdio.h>2.include <string.h>3.int mpt34;4.int mpt_visit34;5.int num6;6.int have13;7.int visit13;8.int ans = 0;9.int Count = 0;10.11.void init12.{13.int k = 1;14.for int i = 0 ; i < 3 ; i ++15.for int j = 0 ; j < 4 ; j ++16. {17. mptij = k;18. k ++;19. }20.}21.int dir42 = {0;1;0;-1;-1;0;1;0};22.//判断五个数是否能连在一起23.void dfs_find int x;int y24.{25.for int i = 0 ; i < 4 ; i++26. {27.int tx;ty;28. tx = x + diri0;29. ty = y + diri1;30.if tx < 0 || tx >= 3 || ty < 0 || ty >= 4 continue;31.if havempttxty == 0 || mpt_visittxty continue;32. mpt_visittxty = 1;33. Count ++;34. dfs_findtx;ty;35. }36.}37.38.void Solve39.{40.int i;41. memsethave;0;sizeof have;42. memsetmpt_visit;0;sizeof mpt_visit;43.for i = 1; i < 6 ; i ++ havenumi = 1;44.for i = 0 ; i < 12 ; i ++45. {46.int x;y;47. x = i / 4;48. y = i % 4;49.if havemptxy50. {51. Count = 1;52. mpt_visitxy =1;53. dfs_findx;y;54.break;55. }56. }57.if Count == 558. {59. ans ++;60. }61.}62.63.//创建5个数的组合64.void dfs_creat int index65.{66.if index == 667. {68. Solve;69.return;70. }71.for int i = numindex-1 + 1; i < 13 ; i ++72. {73.if visiti74. {75. visiti = true;76. numindex = i;77. dfs_creatindex+1;78. visiti = false;79. }80. }81.}82.83.int main84.{85. init;86. dfs_creat1;87. printf"%d\n";ans;88.return 0;89.}第八题:四平方和四平方和定理;又称为拉格朗日定理:每个正整数都可以表示为至多4个正整数的平方和..如果把0包括进去;就正好可以表示为4个数的平方和..比如:5 = 0^2 + 0^2 + 1^2 + 2^27 = 1^2 + 1^2 + 1^2 + 2^2^符号表示乘方的意思对于一个给定的正整数;可能存在多种平方和的表示法..要求你对4个数排序:0 <= a <= b <= c <= d并对所有的可能表示法按 a;b;c;d 为联合主键升序排列;最后输出第一个表示法程序输入为一个正整数N N<5000000要求输出4个非负整数;按从小到大排序;中间用空格分开例如;输入:5则程序应该输出:0 0 1 2再例如;输入:12则程序应该输出:0 2 2 2再例如;输入:773535则程序应该输出:1 1 267 838资源约定:峰值内存消耗 < 256MCPU消耗 < 3000ms请严格按要求输出;不要画蛇添足地打印类似:“请您输入...” 的多余内容..所有代码放在同一个源文件中;调试通过后;拷贝提交该源码..注意: main函数需要返回0注意: 只使用ANSI C/ANSI C++ 标准;不要调用依赖于编译环境或操作系统的特殊函数..注意: 所有依赖的函数必须明确地在源文件中 include <xxx>; 不能通过工程设置而省略常用头文件..提交时;注意选择所期望的编译器类型..这个题目很水也是搜索能做的..但是有点技巧;这里我贡献两个方法给大家参考..方法一:On^3/2.先暴力枚举前三个数然后做减法判断差是否为一个完全平方数即可..当然虽然这个题目是n^3/2看数据貌似过不了..但是貌似我找了几组数据都能秒出结果..应该是绝大多数最外层循环都不会太多..1.include <stdio.h>2.include <math.h>3.int main4.{5.int n;6.int flag = false;7. scanf"%d";&n;8.for int i = 0 ; i i <= n ; i ++9. {10.for int j = 0 ; j j <= n ; j ++{11.for int k = 0 ; k k <= n ; k ++12. {13.int temp = n - ii - jj - kk;14.double l = sqrt double temp;15.if l == int l16. {17.printf"%d %d %d %d\n";i;j;k;int l;18. flag = true;19.break;20. }21. }22.if flag break;23. }24.if flag break;25. }26.return 0;27.}方法二:On 的方法..这个方法是我在比赛的时候用的..先把两个平方数能相加的到的数字球出来然后记录..这样我们第三层循环就可以先判断再循环了..1.include <stdio.h>2.include <math.h>3.int mpt5000010 ={0}; //mpti = 1表示i 能够用两个完全平方数相加而得..4.int n;5.void init6.{7.for int i = 0 ; ii <= n ; i ++8.for int j = 0 ; jj <=n ; j ++9.if ii+jj <= n mptii+jj = 1;10.}11.int main12.{13.15. scanf"%d";&n;16. init;17.for int i = 0 ; i i <= n ; i ++18. {19.for int j = 0 ; j j <= n ; j ++{20.if mptn - ii - jj == 0 continue; //如果剩下的差用两个完全平方数不能组合出来就不继续21.for int k = 0 ; k k <= n ; k ++22. {23.int temp = n - ii - jj - kk;24.double l = sqrt double temp;25.if l == int l26. {27.printf"%d %d %d %d\n";i;j;k;int l;28. flag = true;29.break;30. }31. }32.if flag break;33. }35. }36.return 0;37.}第九题:交换瓶子有N个瓶子;编号 1 ~ N;放在架子上..比如有5个瓶子:2 13 5 4要求每次拿起2个瓶子;交换它们的位置..经过若干次后;使得瓶子的序号为:1 2 3 4 5对于这么简单的情况;显然;至少需要交换2次就可以复位..如果瓶子更多呢你可以通过编程来解决..输入格式为两行:第一行: 一个正整数NN<10000; 表示瓶子的数目第二行:N个正整数;用空格分开;表示瓶子目前的排列情况..输出数据为一行一个正整数;表示至少交换多少次;才能完成排序..例如;输入:53 1 2 5 4程序应该输出:3再例如;输入:55 4 3 2 1程序应该输出:2资源约定:峰值内存消耗 < 256MCPU消耗 < 1000ms请严格按要求输出;不要画蛇添足地打印类似:“请您输入...” 的多余内容..所有代码放在同一个源文件中;调试通过后;拷贝提交该源码..注意: main函数需要返回0注意: 只使用ANSI C/ANSI C++ 标准;不要调用依赖于编译环境或操作系统的特殊函数..注意: 所有依赖的函数必须明确地在源文件中 include <xxx>; 不能通过工程设置而省略常用头文件..提交时;注意选择所期望的编译器类型..啊啊这个题目最开始没看到最上面的那句话;以为输入的数字是随意的int.还做了离散化处理..后来看到了编号为1~n就觉得自己傻逼了..这个题目我用的贪心;从左向右如果当前第i个瓶子编号不是i就把编号为i的瓶子换过来..自己yy几发数据貌似都能过..不清楚是否对..因为这里的n规模为10000;如果在交换的时候去用for找编号为i的瓶子在哪儿时间复杂度为On^2会超时..所以这里要用两个数组;一个数组是记录第i个瓶子编号为多少;一个是记录编号为i的瓶子在哪儿..注意我们在交换的时候要把这两个数组都维护1.include <stdio.h>2.include <math.h>3.int arr10010;4.int flag10010;5.int main6.{7.int ans = 0;8.int n;i;9. scanf"%d";&n;10.for i = 1 ; i <= n ; i ++ scanf"%d";&arri;11.for i = 1 ; i <= n ; i ++ flagarri = i;12.for i = 1 ; i <= n ; i ++13. {14.if i = arri15. {16.int x = arri;17. arri ^= arrflagi ^= arri ^= arrflagi;18. flagi ^= flagx ^= flagi ^= flagx;19. ans ++;20. }21. }22. printf"%d\n";ans;23.return 0;24.}第十题:最大比例X星球的某个大奖赛设了M级奖励..每个级别的奖金是一个正整数..并且;相邻的两个级别间的比例是个固定值..也就是说:所有级别的奖金数构成了一个等比数列..比如:16;24;36;54其等比值为:3/2现在;我们随机调查了一些获奖者的奖金数..请你据此推算可能的最大的等比值..输入格式:第一行为数字N;表示接下的一行包含N个正整数第二行N个正整数XiXi<1 000 000 000 000;用空格分开..每个整数表示调查到的某人的奖金数额要求输出:一个形如A/B的分数;要求A、B互质..表示可能的最大比例系数测试数据保证了输入格式正确;并且最大比例是存在的..例如;输入:31250 200 32程序应该输出:25/4再例如;输入:43125 32 32 200程序应该输出:5/2再例如;输入:3程序应该输出:4/1资源约定:峰值内存消耗 < 256MCPU消耗 < 3000ms请严格按要求输出;不要画蛇添足地打印类似:“请您输入...” 的多余内容..所有代码放在同一个源文件中;调试通过后;拷贝提交该源码..注意: main函数需要返回0注意: 只使用ANSI C/ANSI C++ 标准;不要调用依赖于编译环境或操作系统的特殊函数..注意: 所有依赖的函数必须明确地在源文件中 include <xxx>; 不能通过工程设置而省略常用头文件..提交时;注意选择所期望的编译器类型..这个题目刚开始没准备做后来感觉时间蛮充裕的上次吃了时间的亏这次自己吧时间卡的比较死;一个小时做完了填空题;一个半小时做完了前面两道大题..所以还剩下一个半小时.想了一会儿感觉这个题可做..自己YY了一下..不保证一定正确;可以当作一个参考这个题目意思是相邻两个等级的奖金比例一定是一个相同的分数PP = A/B; A/B为最简分数.题目告诉了你n个人分别领取了多少奖金..让你算这个P最大为多少..我是这么处理的;我们先把n个人的奖金从大到小排序..剔除掉相同的相同的奖金只保留一个..然后前后做除用分数的形式保留前后两个数的比例..如何用分数表示两个数的最简分数呢..例如 A / B = A/GcdA;B / B/GcdA;B..只要把A;B最大公约数去除掉就可以了..现在得到了一堆堆分数Fsi然后怎么处理呢我们知道这些分数一定都满足一个条件就是 Fsi = P^ki 这里的ki是不定的..但是要使得求得P最大;那么一定是所有 ki 求最大公约数得到k' .结果就是 Pk'. 然而这道题数据太大了;并不容易求出这些分数对应的底数以及各自的指数..那么这个方案就不可取了..所以我们要的到结果并不能先求出k‘.但是我们看我们能不能直接求出P^k'. 这里我们先把分子分母分开处理..因为A/B是最简分数.. P^k' = A^k' / B^k'.我们先求A^k' .不知道大家还记不记得欧几里得游戏..这个游戏是这样的..黑板上有两个不同的正整数n;m..现在两个人轮流在黑板上写一个正整数要求这个正整数必须为黑板上某两个数的差并且没有在黑板上出现过..当某人无法再写下一个数的时候游戏结束..其实最后这个游戏本质就是看黑板上最多能写多少个数..事实上我们知道黑板上能写的数都是最开始两个数的最大公约数的倍数..所以黑板上最小的数也就是m;n的最大公约数..这里我们来看;假如我们先求A^k1;A^k2 指数对应的最大公约数..我们吧这个两个数做除法..发现为 A^k1-k2..发现是不是这个题目就转化为欧几里得游戏的填数游戏了..只不过加法改成了除法..所以当出发找到一个没有出现过的商的时候这些数种最小的就是当前的A^k'.然后依次对剩下的A^ki做相同操作就可以得到最终的A^ki;同样可以得到B^ki.最后输出 A^ki/B^ki即可..1.include <stdio.h>2.include <algorithm>3.include <queue>ing namespace std;5.define LL long long6.struct fs7.{8. LL up;down;9.};10.int n;11.LL arr110;12.fs Fs110;13.14.bool cmpLL a;LL b15.{16.return a > b;17.}18.19.LL GcdLL a;LL b20.{21.if b == 0 return a;22.return Gcdb;a%b;23.}24.LL GetLL a; LL b25.{26.if a < b a ^= b ^= a ^= b;27. LL v30;28. queue<LL>team;29.if a == b || a / b == a return b;30. v0 = a; v1 = b;31. v2 = a / b;32.int top = 3;i;j;33. team.pusha/b;34.while team.size35. {36. LL now = team.front;37. team.pop;38.for i = 0 ; i < top ; i ++39. {40. LL temp = vi > now vi / now : now / vi;41.bool find = false;42.for j = 0 ; j < top ; j ++43.if vj == temp find = true;44.if find == true continue;45. team.pushtemp;46. vtop++ = temp;47. }48. }49. LL ans = v0;50.for i = 0 ; i < top ; i ++51.if vi = 152. {53. ans = vi;54.break;55. }56.for i = 0 ; i < top ; i ++57.if vi < ans && vi = 1 ans = vi;58.return ans;59.}60.int main61.{62.int i;j;63. scanf"%d";&n;64.for i = 0 ; i < n ; i ++ scanf"%lld";&arri;65. sortarr;arr+n;cmp;66.int top = 1;67.for i = 1; i < n ; i ++68.if arri = arri-1 arrtop++ = arri;69. n = top;70.for i = 0 ; i < n - 1; i ++71. {72. LL gcd = Gcdarri;arri+1;73. Fsi.up = arri / gcd;74. Fsi.down = arri+1 / gcd;75. }76. LL x = Fs0.up;77.for i = 0 ; i < n - 1 ; i ++78. x = Getx;Fsi.up;79. LL y = Fs0.down;80.for i = 0 ; i < n - 1; i ++81. y = Gety;Fsi.down;82. printf"%lld/%lld\n";x;y;83.return 0;84.}。

2016第七届蓝桥杯大赛CC 大学C组省赛真题详解

2016第七届蓝桥杯大赛CC  大学C组省赛真题详解
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]);
第七届蓝桥杯大赛个人赛省赛(软件类)
C/C++大学C组
一、
试题
1、报纸页数
X星球日报和我们地球的城市早报是一样的,
都是一些单独的纸张叠在一起而已。每张纸印有4版。
比如,某张报纸包含的4页是:5,6,11,12,
可以确定它应该是最上边的第2张报纸。
我们在太空中捡到了一张X星球的报纸,4个页码分别是:
1125,1126,1727,1728
请你计算这份报纸一共多少页(也就是最大页码,并不是用了几张纸哦)?
请填写表示总页数的数字。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
2、煤球数目
有一堆煤球,堆成三角棱锥形。具体:
第一层放1个,
第二层3个(排列成三角形),
第三层6个(排列成三角形),
第四层10个(排列成三角形),
+---+---+---+---+---+---+---+---+---+---+
| | | | | | | | | | |
+---+---+---+---+---+---+---+---+---+---+

蓝桥杯试题及答案

蓝桥杯试题及答案

蓝桥杯试题及答案蓝桥杯是面向全国高校计算机专业学生的程序设计竞赛,由工业和信息化部人才交流中心主办,旨在提高学生的编程能力、算法设计能力以及团队合作能力。

以下是一份蓝桥杯试题及答案的示例,供参考。

### 蓝桥杯程序设计竞赛试题及答案#### 题目一:求最大公约数题目描述:给定两个正整数 a 和 b,请编写一个程序计算它们的最大公约数(GCD)。

输入格式:输入包含两个整数 a 和 b,用空格分隔。

输出格式:输出 a 和 b 的最大公约数。

样例输入:```24 36```样例输出:``````答案:```c#include <stdio.h>int gcd(int a, int b) {while (b != 0) {int temp = b;b = a % b;a = temp;}return a;}int main() {int a, b;scanf("%d %d", &a, &b);printf("%d\n", gcd(a, b));return 0;}```#### 题目二:字符串反转题目描述:编写一个程序,实现对输入的字符串进行反转。

输入格式:输入一个字符串。

输出格式:输出反转后的字符串。

样例输入:```Hello World```样例输出:`````ldrow olleH```答案:```c#include <stdio.h>#include <string.h>int main() {char str[1000];scanf("%s", str);int len = strlen(str);for (int i = len - 1; i >= 0; i--) { printf("%c", str[i]);}return 0;}```#### 题目三:二分查找题目描述:在一个已排序的数组中,使用二分查找算法找出一个特定元素的位置。

第七届蓝桥杯javaB组真题解析-方格填数(第六题)

第七届蓝桥杯javaB组真题解析-方格填数(第六题)

第七届蓝桥杯javaB组真题解析-⽅格填数(第六题)题⽬/*⽅格填数如下的10个格⼦+--+--+--+| | | |+--+--+--+--+| | | | |+--+--+--+--+| | | |+--+--+--+(如果显⽰有问题,也可以参看【图1.jpg】)填⼊0~9的数字。

要求:连续的两个数字不能相邻。

(左右、上下、对⾓都算相邻)⼀共有多少种可能的填数⽅案?请填写表⽰⽅案数⽬的整数。

注意:你提交的应该是⼀个整数,不要填写任何多余的内容或说明性⽂字。

*/答案1580代码1public class Main {2static int sum = 0 ;3public static void main(String[] args) {4int a[] = {0,1,2,3,4,5,6,7,8,9};5int b[] = new int[10];6 String s = "";7 f(a,b,0,s);8 System.out.println(sum);9 }10private static void f(int[] a,int[] b,int k,String s) {11if(k!=0 && k!=1 && k!=4 && k!=8 ){12if(Math.abs(b[k-1]-b[k-2])==1) return;13 }14if(k>=4 && k<=10 && k!=7){15if(Math.abs(b[k-1]-b[k-4])==1) return;16 }17if(k>=5 && k<=10){18if(Math.abs(b[k-1]-b[k-5])==1) return;19 }20if(k==6 || k==7 || k==9 || k==10){21if(Math.abs(b[k-1]-b[k-6])==1) return;22 }2324if(k==a.length) {25 sum++;26 System.out.println(s);27return;28 }29for(int i=0;i<a.length;i++){30 String ss = s;31if(a[i]==-1) continue;32 b[k] = a[i];33 ss += a[i];34 a[i] = -1;35 f(a,b,k+1,ss);36 a[i] = b[k];37 }383940 }41 }分析 这⼜是⼀道涉及到排列组合的算法题,我⽤的是⽐较简单和常见的解法,利⽤循环递归,开始依次向⽅格⾥⾯填数, 每填⼀个数都会判断⼀下这个数是不是符合条件,如果符合条件则递归进去填下⼀个,如果不符合条件则return,当满⾜在满⾜条件的情况下数填完之后(k==10),则sum++,计数加⼀ 因为判断条件对⽅格有所依赖,所以想在短时间内写出⼀个⽐较完美通⽤的算法是有点困难的,我们可以把情况细分,使得条件结构更清晰⼀点, 再说⼀个我觉得⽐较有创意的⼀点,这也是我最近学到的,就是⽤⼀个字符串,让这个字符串也参与递归,就可以巧妙的可以把每次的情况都输出来了,我很喜欢。

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

第七届省赛1.网友年龄某君新认识一网友。

当问及年龄时,他的网友说:“我的年龄是个2位数,我比儿子大27岁,如果把我的年龄的两位数字交换位置,刚好就是我儿子的年龄”请你计算:网友的年龄一共有多少种可能情况?提示:30岁就是其中一种可能哦.请填写表示可能情况的种数。

注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

7x-y=32.生日蜡烛某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。

现在算起来,他一共吹熄了236根蜡烛。

请问,他从多少岁开始过生日party的?请填写他开始过生日party的年龄数。

注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

26#include<iostream>using namespace std;int main(){int i,j;int sum=0;for(i=1;i<=100;i++){ //年龄sum=0;for(j=i;j<=100;j++){ //蜡烛数sum=sum+j;if(sum==236){cout<<i<<endl;break;}}}}3.方格填数如下的10个格子填入0~9的数字。

要求:连续的两个数字不能相邻。

(左右、上下、对角都算相邻)一共有多少种可能的填数方案?请填写表示方案数目的整数。

注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

//用dfs求#include<iostream>#include<cstring>#include<cmath>using namespace std;const int maxn=4;int mp[maxn][maxn];int flag[10];int ans=0;int init() {memset(mp,-10, sizeof mp);memset(flag,0, sizeof flag);}int fx[4]= {0,-1,-1,-1},fy[4]= {-1,-1,0,1};int check(int i,int j) {for(int f=0; f<4; f++) {if(abs(mp[i][j]-mp[i+fx[f]][j+fy[f]])!=1||i+fx[f]<1||j+fy[f]>4||j+fy[f]<1 ) continue;elsereturn 0;}return 1;}void dfs(int i,int j) {if(i==3&&j==4) {ans++;return ;}for(int num=0; num<=9; num++) {if(!flag[num]) {mp[i][j]=num;flag[num]=1;if(check(i,j))if(j==4)dfs(i+1,1);elsedfs(i,j+1);flag[num]=0;}}}int main() {init();dfs(1,2);cout<<ans;}//暴力求解#include <iostream>using namespace std;int ans=0;void swap(int *a,int *b){int *c;c=a;a=b;b=c;}int f(int a[])//判断这种排列组合是否符合题意{if(a[0]-a[4]==-1||a[0]-a[4]==1)return 0;if(a[3]-a[4]==-1||a[3]-a[4]==1)return 0;if(a[5]-a[4]==-1||a[5]-a[4]==1)return 0;if(a[7]-a[4]==-1||a[7]-a[4]==1)return 0;if(a[8]-a[4]==-1||a[8]-a[4]==1)return 0;if(a[9]-a[4]==-1||a[9]-a[4]==1)return 0;if(a[1]-a[4]==-1||a[1]-a[4]==1)return 0;if(a[1]-a[5]==-1||a[1]-a[5]==1)return 0;if(a[1]-a[6]==-1||a[1]-a[6]==1)return 0;if(a[0]-a[5]==-1||a[0]-a[5]==1)return 0;if(a[2]-a[5]==-1||a[2]-a[5]==1)return 0;if(a[8]-a[5]==-1||a[8]-a[5]==1)return 0;if(a[9]-a[5]==-1||a[9]-a[5]==1)return 0;if(a[6]-a[5]==-1||a[6]-a[5]==1)return 0;if(a[6]-a[9]==-1||a[6]-a[9]==1)return 0;if(a[6]-a[2]==-1||a[6]-a[2]==1)return 0;if(a[3]-a[0]==-1||a[3]-a[0]==1)return 0;if(a[3]-a[7]==-1||a[3]-a[7]==1)return 0;if(a[8]-a[7]==-1||a[8]-a[7]==1)return 0;if(a[8]-a[3]==-1||a[8]-a[3]==1)return 0;if(a[9]-a[8]==-1||a[9]-a[8]==1)return 0;if(a[1]-a[0]==-1||a[1]-a[0]==1)return 0;if(a[1]-a[2]==-1||a[1]-a[2]==1)return 0;}void perm(int a[],int m,int len)//列举出0-9所有的组合进行判断{if(m==len-1){if(f(a))ans++;return ;}for(int i=m;i<len;i++){swap(a[m],a[i]);perm(a,m+1,len);swap(a[m],a[i]);}}int main(){int a[10] = {0,1,2,3,4,5,6,7,8,9};perm(a,0,10);cout<<ans<<endl;return 0;}4.快速排序排序在各种场合经常被用到。

快速排序是十分常用的高效率的算法。

其思想是:先选一个“标尺”,用它把整个队列过一遍筛子,以保证:其左边的元素都不大于它,其右边的元素都不小于它。

这样,排序问题就被分割为两个子区间。

再分别对子区间排序就可以了。

下面的代码是一种实现,请分析并填写划线部分缺少的代码。

#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);函数功能为能够实现a[i],a[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)#include <stdio.h>int a[101],n;//定义全局变量,这两个变量需要在子函数中使用void quicksort(int left, int right) {int i, j, t, temp;if(left > right)return;temp = a[left]; //temp中存的就是基准数i = left;j = right;while(i != j) { //顺序很重要,要先从右边开始找while(a[j] >= temp && i < j)j--;while(a[i] <= temp && i < j)//再找右边的i++;if(i < j)//交换两个数在数组中的位置{t = a[i];a[i] = a[j];a[j] = t;}}//最终将基准数归位a[left] = a[i];a[i] = temp;quicksort(left, i-1);//继续处理左边的,这里是一个递归的过程quicksort(i+1, right);//继续处理右边的,这里是一个递归的过程}int main() {int i;//读入数据scanf("%d", &n);for(i = 1; i <= n; i++)scanf("%d", &a[i]);quicksort(1, n); //快速排序调用//输出排序后的结果for(i = 1; i < n; i++)printf("%d ", a[i]);printf("%d\n", a[n]);return 0;}5.消除尾一下面的代码把一个整数的二进制表示的最右边的连续的1全部变成0如果最后一位是0,则原数字保持不变。

如果采用代码中的测试数据,应该输出:00000000000000000000000001100111 00000000000000000000000001100000 00000000000000000000000000001100 00000000000000000000000000001100 请仔细阅读程序,填写划线部分缺少的代码。

#include <stdio.h>void f(int x){int i;for(i=0; i<32; i++) printf("%d", (x>>(31-i))&1);printf(" ");x = _______x&(x+1)________________;for(i=0; i<32; i++) printf("%d", (x>>(31-i))&1);printf("\n");}int main(){f(103);f(12);return 0;}注意:只填写缺少的内容,不要书写任何题面已有代码或说明性文字。

相关文档
最新文档