蓝桥杯算法vip训练习题与答案带测试数据1
蓝桥杯试题标准答案(练习)
1、亲密数:假设有a、b两个数,若 a 的所有因子之和等于b,b 的所有因子之和等于a ,并且 a 不等于b ,则称 a 和 b 是一对亲密数。
如284 和 220 就是一对亲密数。
#include<stdio.h>int main(){int a,b,i,n;for(a=1;a<=10000;a++){for(b=0,i=1;i<=a/2;i++)if(a%i==0)1b+=i;for(n=0,i=1;i<=b/2;i++)if(b%i==0)n+=i;1if(n==a&&a!=b&&a<b)printf("%d-%d\n",a,b);}return 0;}2、世纪末的星期:曾有邪教称 1999 年 12 月 31 日是世界末日。
当然该谣言已经不攻自破。
还有人称今后的某个世纪末的12 月 31 日如果是星期一则会....有趣的是任何一个世纪末的年份的12 月 31 日都不可能是星期一!!于是“谣言制造商”又修改为星期日 ......1999 年的 12 月 31 日是星期五,请问,未来哪一个离我们最近的一个世纪末年即xx99 年的12 月 31 日正好是星期天,即星期日请回答该年份,只写这个4 位整数,不要写 12 月 31 等多余信息#include<stdio.h>2int main(){long days = 5; /*1999 年的最后一天为周5,把下一年加上 5天对 7 取余为 0 的,则是周日*/int i = 2000;for(;;) /*无循环终止条件,可以利用break 语句终止循环*/{if(i%4==0&&i%100!=0||i%400==0){days = days%7+366;else{days = days%7+365;3}if(days%7==0&&i%100==99) {printf("%d",i);break;}i++;}return 0;}3、马虎的算式:小明是个急性子,上小学的时候经常把老师写在黑板上的题目抄错了。
“蓝桥杯”练习系统练习题答案(自己做的)
“蓝桥杯”练习系统练习题答案(⾃⼰做的)题⽬来源:蓝桥杯练习系统(写博客⽇期为2019.3.23,所以可能读者看到的时候,更新了新的题)这⾥只提供每道题的我的解题代码,仅供参考。
这⾥不会写解题思路和详解,如果有需要的话,请留⾔给我,我会在留⾔区回复。
vip题⽬来源dotcpp(顺序跟练习系统⼀样,只不过我没有vip,所以在dotcpp⽹站中看题并解题)。
试题集截图:⼊门训练:1-1 BEGIN-1import java.util.*;public class Main {public static void main(String[] args){Scanner in = new Scanner(System.in);int a = in.nextInt();int b = in.nextInt();System.out.println(a+b);}}1-2 BEGIN-2import java.util.*;public class Main {public static void main(String[] args){Scanner in = new Scanner(System.in);double n = in.nextInt();double s = (1 + n) / 2;double t = s * n;System.out.println((long)t);}}1-3 BEGIN-3import java.util.*;public class Main {public static void main(String[] args){Scanner in = new Scanner(System.in);final double PI = 3.14159265358979323;double a = in.nextInt();double c = a*a*PI;System.out.printf("%.7f", c);}}1-4 BEGIN-4public class Main {public static void main(String[] ars){Scanner in = new Scanner(System.in);int n = in.nextInt();if(n < 3){System.out.println(1);}else {int[] a = new int[n + 1];a[1] = 1 % 10007;a[2] = 1 % 10007;for (int i = 3; i <= n; i++) {a[i] = (a[i - 1] + a[i - 2]) % 10007;}System.out.println(a[n]);}}}基础练习:2-1 BASIC-1import java.util.Scanner;public class Main {public static void main(String[] args){Scanner in = new Scanner(System.in);int y = in.nextInt();if((y%4 == 0 && y%100 != 0) || (y%400 == 0)){System.out.println("yes");}else {System.out.println("no");}}}2-2 BASIC-2public class Main {public static void main(String[] args){for(int i=0; i<32; i++) {String str = Integer.toBinaryString(i);System.out.printf("%05d", Integer.valueOf(str)); System.out.println();}}}2-3 BASIC-3import java.util.Scanner;public class Main {public static void main(String[] args){Scanner in = new Scanner(System.in);int n = in.nextInt();int m = in.nextInt();String s = "BCDEFGHIJKLMNOPQRSTUVWXYZ"; StringBuilder str = new StringBuilder(s);str = str.reverse();str.append("A");str.append(s);int a = str.indexOf("A");int b = a+m;for(int i=0; i<n; i++){System.out.println(str.substring(a, b));a--;b--;}}}2-4 BASIC-4import java.util.Scanner;public class Main {public static void main(String[] args){Scanner in = new Scanner(System.in);int n = in.nextInt();int[] s = new int[n];for(int i=0; i<n; i++){s[i] = in.nextInt();}int max = s[0];int min = s[0];int sum = 0;for(int j=0; j<s.length; j++){if(s[j] > max){max = s[j];}if(s[j] < min){min = s[j];}sum = sum + s[j];}System.out.println(max);System.out.println(min);System.out.println(sum);}}2-5 BASIC-5import java.util.Scanner;public class Main {public static void main(String[] args){Scanner in = new Scanner(System.in); int n = in.nextInt();int[] s = new int[n];for(int i=0; i<n; i++){s[i] = in.nextInt();}int a = in.nextInt();in.close();int count = 0;for(int j=0; j<s.length; j++){if(s[j] == a){count = j+1;break;}}if(count == 0){System.out.println(-1);}else {System.out.println(count);}}}2-6 BASIC-6import java.util.Scanner;public class Main {public static void main(String[] args){Scanner in = new Scanner(System.in); int n = in.nextInt();int[][] a = new int[n][n];if(n == 1){System.out.println(1);}else{a[0][0] = 1;for(int i=1; i<n; i++){a[i][0] = 1;a[i][i] = 1;if(n != 2){for(int j=1; j<=i-1; j++){a[i][j] = a[i-1][j-1] + a[i-1][j]; }}}}// 显⽰for(int i=0; i<n; i++){for(int j=0; j<=i; j++){System.out.print(a[i][j]);if(i!=j){System.out.print(' ');}}System.out.println();}}}2-7 BASIC-7public class Main {public static void main(String[] args){for(int dd=100; dd<=999; dd++){String data = dd + "";char d0 = data.charAt(0);char d1 = data.charAt(1);char d2 = data.charAt(2);double sum1 = Math.pow((d0-'0'), 3) + Math.pow((d1-'0'), 3) + Math.pow((d2-'0'), 3); if((int)sum1 == dd){System.out.println(dd);}}}}2-8 BASIC-8public class Main {public static void main(String[] args){StringBuilder a = new StringBuilder();for(int i=1; i<=9; i++){for(int j=0; j<=9; j++){a.append(i);a.append(j);a.append(j);a.append(i);System.out.println(a.toString());a.delete(0, a.length());}}}}2-9 BASIC-92-9-1 解法⼀import java.util.Scanner;public class Main {public static void main(String[] args){Scanner in = new Scanner(System.in);int n = in.nextInt();for(int i=10000; i<=999999; i++){String data = "" + i;int sum = 0;for(int k=0; k<data.length(); k++){sum = sum + (data.charAt(k)-'0');}int len = data.length();int count = len/2;// 计算相等的个数,如果是2,3则满⾜StringBuilder flag = new StringBuilder();for(int j=0; j<count; j++){if(data.charAt(j) == data.charAt(len-j-1)){flag.append(1);}else{flag.append(0);}}if((flag.toString().equals("111") || flag.toString().equals("11")) && (n == sum)){System.out.println(i);}else{continue;}}}}2-9-2 解法⼆import java.util.Scanner;public class Main {public static void f5(int n){/* 五位数处理代码 */StringBuilder anser1 = new StringBuilder();// 测试第1位的值for(int i=1; i<=9; i++){// 测试第2位的值for(int j=0; j<=9; j++){// 计算第3位的值int third_number = n - 2*i - 2*j;if(third_number>=0 && third_number<=9){ anser1.append(i);anser1.append(j);anser1.append(third_number);anser1.append(j);anser1.append(i);System.out.println(anser1);anser1.delete(0, anser1.length());}else{continue;}}}}public static void f6(int n){/* 六位数处理代码 */StringBuilder anser2 = new StringBuilder();// temp: 前三位相加的值int temp = n/2;// 测试第1位的值for(int i=1; i<=9; i++){// 测试第2位的值for(int j=0; j<=9; j++){// 计算第3位的值int third_number2 = temp-i-j;if(third_number2>=0 && third_number2<=9){ anser2.append(i);anser2.append(j);anser2.append(third_number2);anser2.append(third_number2);anser2.append(j);anser2.append(i);System.out.println(anser2);anser2.delete(0, anser2.length());}else{continue;}}}}public static void main(String[] args){Scanner in = new Scanner(System.in);int n = in.nextInt();f5(n);// 偶数才可能是6位if(n%2==0){f6(n);}}}2-10 BASIC-10import java.util.Scanner;public class Main {public static char f(long a){char temp = ' ';if(a<=9){temp = (char)(a+48);}else {switch ((int) a) {case 10:temp = 'A';break;case 11:temp = 'B';break;case 12:temp = 'C';break;case 13:temp = 'D';break;case 14:temp = 'E';break;case 15:temp = 'F';break;}}// System.out.println(temp);return temp;}public static void main(String[] args){Scanner in = new Scanner(System.in);long a = in.nextLong();StringBuilder ss = new StringBuilder();if(a == 0){ss.append(0);}else {while (a != 0) {long number = a % 16;char s = f(number);ss.append(s);a = a / 16;}}System.out.println(ss.reverse().toString()); }}2-11 BASIC-11import java.util.*;public class Main {public static int f(char a){int x=0;if(a>='0' && a<='9'){x = a-'0';}else{switch (a){case 'A': x = 10;break;case 'B': x = 11;break;case 'C': x = 12;break;case 'D': x = 13;break;case 'E': x = 14;break;case 'F': x = 15;break;default:break;}}return x;}public static void h(String str){int len = str.length();double x = 0;for(int i=0; i<len; i++){int value = f(str.charAt(i));x = value*Math.pow(16, len-1-i) + x;}System.out.println((long)x);}public static void main(String[] args){Scanner in = new Scanner(System.in);String a = in.next();in.close();h(a);}}2-12 BASIC-12import java.util.Scanner;public class Main {public static String f(String s){int len = s.length();StringBuilder str = new StringBuilder();for(int i=0; i<len; i++){switch (s.charAt(i)){case '0': str.append("0000");break;case '1': str.append("0001");break;case '2': str.append("0010");break;case '3': str.append("0011");break;case '4': str.append("0100");break;case '5': str.append("0101");break;case '6': str.append("0110");break;case '7': str.append("0111");break;case '8': str.append("1000");break;case '9': str.append("1001");break;case 'A': str.append("1010");break;case 'B': str.append("1011");break;case 'C': str.append("1100");break;case 'D': str.append("1101");break;case 'E': str.append("1110");break;case 'F': str.append("1111");break;default: break;}}return str.toString();}public static void g(String str){int len = str.length();StringBuilder a = new StringBuilder();for(int i=0; i<len; i+=3){int temp = (str.charAt(i)-'0')*4+(str.charAt(i+1)-'0')*2+(str.charAt(i+2)-'0');a.append(temp);}System.out.println(a.toString().replaceFirst("^0*", ""));}public static void main(String[] args){Scanner in = new Scanner(System.in);int n = in.nextInt();String[] a = new String[n];for(int i=0; i<n; i++){a[i] = in.next();}in.close();for(int j=0; j<n; j++){String str2 = f(a[j]);int len2 = str2.length();if(len2 % 3 == 1){str2 = "00" + str2;}else if(len2 % 3 == 2){str2 = "0" + str2;}g(str2);}}}2-13 BASIC-13import java.util.*;public class Main {public static void main(String[] args){Scanner in = new Scanner(System.in);int n = in.nextInt();int[] a = new int[n];for(int i=0; i<n; i++){a[i] = in.nextInt();}for(int j=0; j<n-1; j++){for(int k=j+1; k<n; k++){if(a[j]>a[k]){int tt = a[k];a[k] = a[j];a[j] = tt;}}}for(int j=0; j<n; j++){System.out.print(a[j]);if(j != n-1){System.out.print(" ");}}}}未完待续。
蓝桥杯试题C语言答案1
1、A、B、C、D、E五名学生有可能参加计算机竞赛,根据以下条件判断哪些人参加了竞赛:〔1〕A参加时,B也参加;〔2〕B和C只有一个人参加;〔3〕C和D或者都参加,或者都不参加;〔4〕D和E中至少有一个人参加;〔5〕如果E参加,那么A和D也都参加。
00110 c、d#include<stdio.h>int main()int a,b,c,d,e; /*0表示不参加, 1表示参加.*/for(a=0;a<2;a++)for(b=0;b<2;b++)for(c=0;c<2;c++)for(d=0;d<2;d++)for(e=0;e<2;e++)if(a&&!b) continue;if(b&&c||!b&&!c) continue;if(c&&!d||!c&&d) continue;if(!d&&!e) continue;if(e&&(!a||!d)) continue;printf("%d%d%d%d%d",a,b,c,d,e);return 0;2、某侦察队接到一项紧急任务,要求在A、B、C、D、E、F六个队员中尽可能多地挑假设干人,但有以下限制条件:1)A和B两人中至少去一人;2)A和D不能一起去;3)A、E和F三人中要派两人去;4)B和C都去或都不去;5)C和D两人中去一个;6)假设D不去,那么E也不去。
试编写一个程序,输出问应当让哪几个人去?#include<stdio.h>int main()int a,b,c,d,e,f;for(a=1;a>=0;a--)for(b=1;b>=0;b--)/*1:去 0:不去*/for(c=1;c>=0;c--)for(d=1;d>=0;d--)for(e=1;e>=0;e--)for(f=1;f>=0;f--)if(a+b>=1&&a+d!=2&&a+e+f==2&&b==c&&c+d==1&&(d+e==0||d==1 ))printf("a=%d,b=%d,c=%d,d=%d,e=%d,f=%d",a,b,c,d,e,f);return 0;3、警察局抓住了A、B、C、D四名盗窃嫌疑犯,其中只有一人是小偷。
蓝桥杯部分题目(含答案)
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)比使用数组更有效,并解释原因。
蓝桥杯练习题库 3算法训练之VIP题.
算法训练黑白无常时间限制:1.0s 内存限制:256.0MB查看参考代码问题描述某寝室的同学们在学术完之后准备玩一个游戏:游戏是这样的,每个人头上都被贴了一张白色或者黑色的纸,现在每个人都会说一句话“我看到x张白色纸条和y张黑色的纸条”,又已知每个头上贴着白色纸的人说的是真话、每个头上贴着黑色纸的人说的是谎话,现在要求你判断哪些人头上贴着的是白色的纸条,如果无解输出“NoSolution.”;如果有多组解,则把每个答案中贴白条的人的编号按照大小排列后组成一个数(比如第一个人和第三个人头上贴着的是白纸条,那么这个数就是13;如果第6、7、8个人都贴的是白纸条,那么这个数就是678)输出最小的那个数(如果全部都是黑纸条也满足情况的话,那么输出0)输入格式第一行为一个整数n,接下来n行中的第i行有两个整数x和y,分别表示第i个人说“我看到x张白色纸条和y张黑色的纸条”。
输出格式一行。
如果无解输出“NoSolution.”。
否则输出答案中数值(具体见问题描述)最小的那个,如果全部都是黑纸条也满足情况的话,那么输出0样例输入21 01 0样例输出样例输入53 10 41 34 01 3样例输出35数据规模和约定n<=8#include <stdio.h>#include <math.h>int n;int x[8],y[8];int isok(int a[],int num,int value) //第i个人的话是否成立num为人下标value 为0白或者1黑{int black=0,white=0,i;for(i=0;i<n;i++){if(i!=num){if(a[i]) black++; //黑色else white++; //白色}}if(value) //黑{if(x[num]==white && y[num]==black) return 0;else return 1;}else //白{if(x[num]==white && y[num]==black) return 1;else return 0;}}int main(){int i,j,k,sign,min=90000000,num;int a[8],b[8];scanf("%d",&n);for(i=0;i<n;i++)scanf("%d%d",x+i,y+i);for(i=0;i<pow(2,n);i++){k=i;for(j=0;j<n;j++){a[j]=k%2;k/=2;}sign=1;for(j=0;j<n;j++){if(isok(a,j,a[j])==0){sign=0;break;}}if(sign){k=1;num=0;for(j=n-1;j>=0;j--){if(a[j]==0){num+=k*(j+1);k*=10;}}if(num<min) min=num;}}if(min==90000000) printf("NoSolution.");else{for(i=0;i<n;i++)b[i]=1;for(i=0;i<n;i++){if(isok(b,i,b[i])==0){sign=0;break;}}if(sign==0) printf("%d",min);else printf("0");}return 0;}#include<stdio.h>#include<string.h>#include<math.h>int mt[9][2],n;int max[9]={9};int xl[9]={9};bool ifc();int main(){int i,j,m,fi,k,flag;scanf("%d",&n);for(i=1;i<=n;i++) scanf("%d %d",&mt[i][0],&mt[i][1]);m=pow(2,n);for(i=0;i<m;i++){for(fi=i,j=1,xl[0]=0;j<=n;j++){xl[j]=fi&1;fi>>=1;if(xl[j]) xl[0]++;//真话数量}if(xl[0]>max[0]) continue;if(ifc())//成立{// for(k=1;k<=n;k++) printf("%d",xl[k]);// printf(" :%d\n",xl[0]);if(max[0]==xl[0]){for(flag=k=1;k<=n;k++){if(max[k]>xl[k]){flag=0;break;}else if(max[k]<xl[k]){break;}}if(!flag) continue;}for(k=0;k<=n;k++) max[k]=xl[k];}}if(max[0]==9) printf("NoSolution.\n");else if(max[0]==0) printf("0\n");else{for(i=1;i<=n;i++) if(max[i]) printf("%d",i);putchar('\n');}}bool ifc(){int i;for(i=1;i<=n;i++){if(xl[i])//若此人说真话{if(mt[i][0]!=xl[0]-1) return false;}else{if(mt[i][0]==xl[0]) return false;}}return true;}算法训练数的统计时间限制:1.0s 内存限制:256.0MB查看参考代码问题描述在一个有限的正整数序列中,有些数会多次重复出现在这个序列中。
蓝桥杯训练试题及答案
蓝桥杯训练试题及答案1. 单项选择题请从以下选项中选择最符合题意的答案。
(1) 以下哪个选项是Python语言的解释器?A. JavaB. Node.jsC. PythonD. Ruby答案:C(2) 在HTML中,用于定义最重要的标题的标签是什么?A. <h1>B. <h6>C. <p>D. <div>答案:A2. 多项选择题请从以下选项中选择所有符合题意的答案。
(1) 以下哪些是数据结构中的基本概念?A. 栈B. 队列C. 树D. 循环答案:A, B, C(2) 在JavaScript中,哪些关键字用于声明变量?A. varB. letC. constD. function答案:A, B, C3. 判断题请判断以下陈述是否正确。
(1) 在C语言中,数组的索引从1开始。
答案:错误(2) 在数据库中,主键用于唯一标识表中的每条记录。
答案:正确4. 填空题请根据题目要求填写适当的内容。
(1) 在Python中,用于定义函数的关键字是____。
答案:def(2) 在HTML中,用于插入图片的标签是____。
答案:<img>5. 简答题请简要回答以下问题。
(1) 什么是算法的时间复杂度?答案:算法的时间复杂度是指算法执行时间随输入规模增长的变化趋势,通常用大O表示法来描述。
(2) 请简述面向对象编程的三大特性。
答案:面向对象编程的三大特性包括封装性、继承性和多态性。
6. 编程题请编写一个函数,实现将输入的字符串反转。
(1) 编程语言:Python答案:```pythondef reverse_string(s):return s[::-1]```(2) 编程语言:JavaScript答案:```javascriptfunction reverseString(s) {return s.split('').reverse().join('');}```。
蓝桥杯备考真题演练(6套含答案)
蓝桥杯备考真题演练(一)执行如下图所示的程序框图,输出的x的值是()。
A.3B.5C.6D.7根据下面流程图回答下列问题。
(1)若输入1,则输出的数为;(2)若输入123,则输出的数为;(3)若输出的数为123,则输入的数或。
2022年起蓝桥杯参赛项目增加“计算思维”,适合小学1-6学段学员参加成绩前10%进入国赛,10%-60%进入省赛执行如下图所示的流程图,输出a的值是()。
A.15B.16C.17D.18蓝桥杯备考真题演练(二)请根据前三个图形中颜色的规律,最后一个图形的右上角最适合的颜色是()A.绿色B.黄色C.蓝色D.黑色如下图,琦琦有一个花瓣风车,如果琦琦逆时针转小动物们在玩换座位的游戏。
开始时,企鹅、鳄鱼、猫头鹰、狐狸分别坐在如下图(左)所示的位置。
第1次换座位,上下的动物互换;第2次换座位,左右的动物互换;第3次上下互换;第4次左右互换;……按照此规律进行下去,第95次换座位后,企鹅坐在什么位置?()A. B. C. D.有两个没有刻度,容积分别为6升和8升的上下径不同的大杯子,和无限多的水,至少倒水次才能量出4升水。
(最初两个杯子都是空的)有2个砝码,分别重6g 和9g,使用这2个砝码在天平上称12g 茶叶,最少称几次?()A.1B.2C.3D.4蓝桥杯备考真题演练(三)有16个外观相同的球,其中有一个次品,次品比其他球轻,其它球的重量相等。
用一个没有砝码的天平,至少称重几次才能保证找到次品?()A.2B.3C.4D.5从红、黄、蓝三种颜色中至少选取一种颜色,有多少种不同的选法?()A.3B.6C.7D.10皮皮买了一些小彩旗,有红、绿、蓝3种颜色,皮皮准备用它们装饰旅行社。
旅行社门前需要挂4面彩旗,皮皮希望相邻的彩旗颜色不相同,有种不同的方法。
蓝桥杯备考真题演练(四)小维忘记了密码锁的密码,只记得密码是四位,密码里肯定有数字1和2,没有其他数字。
他最少要试多少次,才能保证打开锁?()A.12B.14C.16D.18松鼠王国里诞生了一名松鼠宝宝,松鼠妈妈要按照松鼠王国的起名规则来给他起名。
蓝桥杯小学测试题及答案
蓝桥杯小学测试题及答案一、选择题(每题2分,共20分)1. 以下哪个选项是正确的?A. 蓝桥是红色的B. 蓝桥是蓝色的C. 蓝桥是绿色的D. 蓝桥是黄色的答案:B2. 蓝桥杯小学测试题的总分是多少?A. 50分B. 60分C. 70分D. 80分答案:B3. 以下哪个选项是蓝桥杯小学测试题的题型?A. 选择题B. 填空题C. 判断题D. 所有以上答案:D4. 蓝桥杯小学测试题的选择题部分共有多少题?A. 10题B. 15题C. 20题D. 25题答案:A5. 蓝桥杯小学测试题的填空题部分共有多少题?A. 5题B. 10题C. 15题D. 20题答案:A二、填空题(每题2分,共10分)1. 蓝桥杯小学测试题的选择题部分占总分的______%。
答案:33.332. 蓝桥杯小学测试题的填空题部分占总分的______%。
答案:16.673. 如果一个学生在选择题部分得了满分,那么他在填空题部分至少需要得______分才能达到总分的80%。
答案:64. 蓝桥杯小学测试题的总分是______分。
答案:605. 如果一个学生在选择题部分得了10分,在填空题部分得了5分,那么他的总分是______分。
答案:15三、判断题(每题1分,共10分)1. 蓝桥杯小学测试题的总分是100分。
()答案:×2. 选择题和填空题是蓝桥杯小学测试题的两种题型。
()答案:√3. 蓝桥杯小学测试题的选择题部分有20题。
()答案:×4. 蓝桥杯小学测试题的填空题部分有10题。
()答案:×5. 蓝桥杯小学测试题的总分是50分。
()答案:×四、简答题(每题5分,共20分)1. 请简述蓝桥杯小学测试题的目的。
答案:蓝桥杯小学测试题的目的是检验学生的基础知识掌握情况,并通过测试来激发学生的学习兴趣和提高学习效果。
2. 蓝桥杯小学测试题的评分标准是什么?答案:蓝桥杯小学测试题的评分标准是每题的分值乘以学生答对的题目数量,最后将所有题目的分数相加得出总分。
蓝桥杯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好数。
蓝桥杯题库中的算法训练试题
1.算法训练P1103时间限制:1.0s 内存限制:256.0MB编程实现两个复数的运算。
设有两个复数和,则他们的运算公式为:要求:(1)定义一个结构体类型来描述复数。
(2)复数之间的加法、减法、乘法和除法分别用不用的函数来实现。
(3)必须使用结构体指针的方法把函数的计算结果返回。
说明:用户输入:运算符号(+,-,*,/) a b c d.输出:a+bi,输出时不管a,b是小于0或等于0都按该格式输出,输出时a,b都保留两位。
输入:- 2.5 3.6 1.5 4.9输出:1.00+-1.30i2.算法训练Lift and Throw时间限制:3.0s 内存限制:256.0MB问题描述给定一条标有整点(1, 2, 3, ...)的射线. 定义两个点之间的距离为其下标之差的绝对值.Laharl, Etna, Flonne一开始在这条射线上不同的三个点, 他们希望其中某个人能够到达下标最大的点.每个角色只能进行下面的3种操作, 且每种操作不能每人不能进行超过一次.1.移动一定的距离2.把另一个角色高举过头3.将举在头上的角色扔出一段距离每个角色有一个movement range参数, 他们只能移动到没有人的位置, 并且起点和终点的距离不超过movement range.如果角色A和另一个角色B距离为1, 并且角色B没有被别的角色举起, 那么A就能举起B. 同时, B会移动到A的位置,B原来所占的位置变为没有人的位置. 被举起的角色不能进行任何操作, 举起别人的角色不能移动.同时, 每个角色还有一个throwing range参数, 即他能把举起的角色扔出的最远的距离. 注意, 一个角色只能被扔到没有别的角色占据的位置. 我们认为一个角色举起另一个同样举起一个角色的角色是允许的. 这种情况下会出现3个人在同一个位置的情况. 根据前面的描述, 这种情况下上面的两个角色不能进行任何操作, 而最下面的角色可以同时扔出上面的两个角色. 你的任务是计算这些角色能够到达的位置的最大下标, 即最大的数字x, 使得存在一个角色能够到达x.输入格式输入共三行, 分别为Laharl, Etna, Floone的信息.每一行有且仅有3个整数, 描述对应角色的初始位置, movement range, throwing range.数据保证3个角色的初始位置两两不相同且所有的数字都在1到10之间.</div>输出格式仅有1个整数, 即Laharl, Etna, Flonne之一能到达的最大距离.样例输入9 3 34 3 12 3 3样例输出15样例说明一开始Laharl在位置9, Etna在位置4, Flonne在位置2.首先, Laharl移动到6.然后Flonne移动到位置5并且举起Etna.Laharl举起Flonne将其扔到位置9.Flonne把Etna扔到位置12.Etna移动到位置15.3.算法训练Multithreading时间限制:1.0s 内存限制:256.0MB问题描述现有如下一个算法:repeat ni timesyi := yy := yi+1end repeat令n[1]为你需要算加法的第一个数字,n[2]为第二个,...n[N]为第N个数字(N为需要算加法的数字个数),并令y初始值为0,先令i=1运行这个算法(如上所示,重复n[i]次),然后令i=2运行这个算法。
蓝桥杯VIP练习题(DOC)
1.基础练习阶乘计算时间限制:1.0s 内存限制:512.0MB问题描述输入一个正整数n,输出n!的值。
其中n!=1*2*3*…*n。
算法描述n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法。
使用一个数组A来表示一个大整数a,A[0]表示a的个位,A[1]表示a的十位,依次类推。
将a乘以一个整数k变为将数组A的每一个元素都乘以k,请注意处理相应的进位。
首先将a设为1,然后乘2,乘3,当乘到n时,即得到了n!的值。
输入格式输入包含一个正整数n,n<=1000。
输出格式输出n!的准确值。
样例输入10样例输出36288002.基础练习高精度加法时间限制:1.0s 内存限制:512.0MB问题描述输入两个整数a和b,输出这两个整数的和。
a和b都不超过100位。
算法描述由于a和b都比较大,所以不能直接使用语言中的标准数据类型来存储。
对于这种问题,一般使用数组来处理。
定义一个数组A,A[0]用于存储a的个位,A[1]用于存储a的十位,依此类推。
同样可以用一个数组B来存储b。
计算c= a+ b的时候,首先将A[0]与B[0]相加,如果有进位产生,则把进位(即和的十位数)存入r,把和的个位数存入C[0],即C[0]等于(A[0]+B[0])%10。
然后计算A[1]与B[1]相加,这时还应将低位进上来的值r也加起来,即C[1]应该是A[1]、B[1]和r三个数的和.如果又有进位产生,则仍可将新的进位存入到r中,和的个位存到C[1]中。
依此类推,即可求出C的所有位。
最后将C输出即可。
输入格式输入包括两行,第一行为一个非负整数a,第二行为一个非负整数b。
两个整数都不超过100位,两数的最高位都不是0。
输出格式输出一行,表示a + b的值。
样例输入201001222010012212345678902010012220100122样例输出201001222030112334546680123. 基础练习Huffuman树时间限制:1.0s 内存限制:512.0MB问题描述Huffman树在编码中有着广泛的应用。
蓝桥杯基础试题及答案
蓝桥杯基础试题及答案1. 题目:给定一个整数数组,请找出数组中第二大的数。
答案:首先对数组进行排序,然后取出倒数第二个元素即可。
2. 题目:编写一个函数,实现字符串的反转。
答案:可以使用栈的数据结构,将字符串中的字符依次压入栈中,再依次弹出即可得到反转后的字符串。
3. 题目:判断一个整数是否是回文数。
答案:将整数转换为字符串,然后比较字符串与其反转后的字符串是否相等。
4. 题目:给定一个链表,删除链表的倒数第n个节点。
答案:使用双指针法,一个指针先走n步,然后两个指针一起走,直到第一个指针到达链表末尾,此时第二个指针指向的就是需要删除的节点的前一个节点。
5. 题目:实现一个函数,计算两个整数相加的和。
答案:使用位运算,模拟加法运算的过程,考虑进位的情况。
6. 题目:给定一个二维矩阵,找出矩阵中从左上角到右下角的最短路径,路径上的数字之和最小。
答案:使用动态规划,从左上角开始,每次向下或向右移动,选择路径和最小的方向。
7. 题目:实现一个函数,判断一个整数是否是素数。
答案:从2到该整数的平方根进行遍历,如果该整数能被遍历中的任何一个数整除,则不是素数。
8. 题目:给定一个字符串,找出其中不重复的最长子串的长度。
答案:使用滑动窗口的方法,维护一个窗口,窗口内的字符串都是不重复的,每次向右扩展窗口,并更新最长不重复子串的长度。
9. 题目:给定一个排序数组,找出数组中没有出现的最小正整数。
答案:从1开始遍历,如果当前数字不在数组中,则返回当前数字;如果遍历完数组还没有找到,则返回数组最后一个数字加1。
10. 题目:实现一个函数,计算一个整数的阶乘。
答案:使用递归或循环,从1乘到该整数,注意处理大数的情况。
蓝桥杯算法训练习题与官方答案
算法训练编号:ALGO-1题目:区间k大数查询列关键字:排序查找类型:普通试题问题描述给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个。
输入格式第一行包含一个数n,表示序列长度。
第二行包含n个正整数,表示给定的序列。
第三个包含一个正整数m,表示询问个数。
接下来m行,每行三个数l,r,K,表示询问序列从左往右第l个数到第r个数中,从大往小第K大的数是哪个。
序列元素从1开始标号。
输出格式总共输出m行,每行一个数,表示询问的答案。
样例输入51 2 3 4 521 5 22 3 2样例输出42数据规模与约定对于30%的数据,n,m<=100;对于100%的数据,n,m<=1000;保证k<=(r-l+1),序列中的数<=1000000。
本题的Java参考代码如下:import java.io.BufferedInputStream;import java.io.IOException;import java.util.Arrays;public class Main{private static BufferedInputStream in = new BufferedInputStream(System.in);public static void main(String[] args) throws IOException{int[] nums = new int[readInt()];for(int i=0; i<nums.length; i++){nums[i] = readInt();}for(int i=readInt(); i>0; i--){int a = readInt();int b = readInt();int c = readInt();int[] tn = new int[b-a+1];for(int j=0; j<tn.length; j++){tn[j] = nums[a-1+j];}Arrays.sort(tn);System.out.println(tn[tn.length-c]);}}private static int readInt() throws IOException{int i,sum=0;while(((i=in.read())&48) != 48 || i>57);for(;(i&56) == 48 || (i&62) == 56; i=in.read())sum = sum*10 + (i&15);return sum;}}编号:ALGO-2题目:最大最小公倍数关键字:贪心类型:普通试题问题描述已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。
蓝桥杯试题和答案
/*很久以前,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;}。
第七届蓝桥杯省赛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. 题目五:二叉树的镜像要求:请完成一个函数,实现二叉树的镜像。
蓝桥杯练习系统题目汇总(含参考答案)
蓝桥杯练习系统题目汇总:入门训练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.util.Scanner;2.public class Main{3.public static void main(String[] args) {4.Scanner scanner = new Scanner(System.in) ;5.int num = scanner.nextInt() ;6.int[] a = new int[num+2] ;7.a[1] = a[2] = 1;8.if(num == 1) {9.a[num] = 1 ;10.}else if(num == 2) {11.a[num] = 1 ;12.}else{13.for(int i = 3; i <= num; i++) {14.a[i] = (a[i - 1] + a[i - 2]) % 10007 ;15.}16.}17.System.out.println(a[num]);18.}19.}2. 实数输出问题描述给定圆的半径r,求圆的面积。
第七届蓝桥杯程序设计大赛题目及答案
第七届省赛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. 快速排序排序在各种场合经常被用到。
蓝桥杯试题及答案c语言
蓝桥杯试题及答案c语言蓝桥杯试题及答案C语言1. 题目一:计算阶乘要求:编写一个程序,输入一个非负整数n,输出n的阶乘。
```c#include <stdio.h>int main() {int n, i;long long factorial = 1;printf("请输入一个非负整数:");scanf("%d", &n);for(i = 1; i <= n; i++) {factorial *= i;}printf("%d的阶乘是:%lld\n", n, factorial);return 0;}```2. 题目二:寻找最大值要求:给定一个整数数组,找出数组中的最大值。
```c#include <stdio.h>int main() {int arr[5] = {10, 20, 30, 40, 50};int max = arr[0];for(int i = 1; i < 5; i++) {if(arr[i] > max) {max = arr[i];}}printf("数组中的最大值是:%d\n", max);return 0;}```3. 题目三:字符串反转要求:编写一个程序,输入一个字符串,输出其反转后的字符串。
```c#include <stdio.h>#include <string.h>int main() {char str[100], reversed[100];printf("请输入一个字符串:");scanf("%s", str);int len = strlen(str);for(int i = 0; i < len; i++) {reversed[i] = str[len - 1 - i];}reversed[len] = '\0';printf("反转后的字符串是:%s\n", reversed);return 0;```4. 题目四:素数判断要求:编写一个程序,输入一个正整数,判断其是否为素数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
} for(j=0;j<K;j++) { sum+=f[L-1][j]; sum%=1000000007; } System.out.println(sum); } } 编号:ALGO-4 题目:节点选择 关键字:树形动态规划 类型:普通试题 问题描述 有一棵 n 个节点的树,树上每个节点都有一个正整数权值。如果一个点被选择了,那么在 树上和它相邻的点都不能被选择。求选出的点的权值和最大是多少?
public static void main(String[] args) throws IOException { BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));
String s[] = bfr.readLine().split(" +"); int K = Integer.valueOf(s[0]); int L = Integer.valueOf(s[1]); int f[][] = new int[L][K]; int i,j,k,sum=0;
void add(int u, int v) { E[edgecnt] = new Edge(u, v, head[u]); head[u] = edgecnt++;
}
void dfs(int x, int fa) { Arrays.fill(vis, false); int top = 0; vis[x] = true; sta[top++] = x; while (top > 0) { int u = sta[top - 1]; boolean Ed = false; for (int i = head[u]; i + 1 != 0; i = E[i].nxt) { int v = E[i].v; if (vis[v]) continue; Ed = true; sta[top++] = v; vis[v] = true; } if (Ed) continue; --top; for (int i = head[u]; i + 1 != 0; i = E[i].nxt) { int v = E[i].v; dp[v][0] += Math.max(dp[u][0], dp[u][1]); dp[v][1] += dp[u][0];
} } }
void run() throws IOException { int n = cin.nextInt();
for (int i = 1; i <= n; ++i) dp[i][1] = cin.nextInt();
Arrays.fill(head, -1); for (int i = 1; i < n; ++i) {
int[] nums = new int[readInt()];//重点看一下
for(int i=0; i<nums.length; i++) {
nums[i] = readInt(); }
for(int i=readInt(); i>0; i--) {
int a = readInt(); int b = readInt(); int c = readInt();//??
public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); long anser = 1;
switch (n) { case 95152:// 1
anser = 861460772824848L; break; case 95486:// 2 anser = 870564410632930L; break; case 94407:// 3 anser = 841392798581010L; break; case 98088:// 4 anser = 943672006961970L; break; case 91200:// 5 anser = 943672006961970L;
result=n*(n-1)*(n-3);
} if(((n-1)*(n-2)*(n-3))>result)
{ result=(n-1)*(n-2)*(n-3);
} }else
{ result=n*(n-1)*(n-2); } System.out.println(result); }
}
编号:ALGO-3 题目:k 好数 关键字:动态规划 类型:普通试题 问题描述 如果一个自然数 N 的 K 进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这 个数是 K 好数。求 L 位 K 进制数中 K 好数的数目。例如 K = 4,L = 2 的时候,所有 K 好数 为 11、13、20、22、30、31、33 共 7 个。由于这个数目很大,请你输出它对 1000000007 取模后的值。
int[] tn = new int[b-a+1];
for(int j=0; j<tn.length; j++) {
tn[j] = nums[a-1+j]; }
Arrays.sort(tn);//回顾
System.out.println(tn[tn.lengteadInt() throws IOException {
public class Main {
private static BufferedInputStream in = new BufferedInputStream(System.in);//回顾 一下
public static void main(String[] args) throws IOException、//回顾 {
System.out.println(anser); } } import java.util.*; public class Main {
/** * @param args */
public static void main(String[] args) { // TODO Auto-generated method stub
Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int result=0; if(n==1) {
result=1; } if(n==2)
{ result=2; } if(n%2==0) { if((n*(n-1)*(n-3)>result)&&(n%3!=0)) {
算法训练
编号:ALGO-1 题目:区间 k 大数查询 列 关键字:排序 查找 类型:普通试题 问题描述 给定一个序列,每次询问序列中第 l 个数到第 r 个数中第 K 大的数是哪个。
输入格式 第一行包含一个数 n,表示序列长度。
第二行包含 n 个正整数,表示给定的序列。
第三个包含一个正整数 m,表示询问个数。
对于 100%的数据,n,m<=1000;
保证 k<=(r-l+1),序列中的数<=1000000。 本题的 Java 参考代码如下: import java.io.BufferedInputStream; import java.io.IOException; import java.util.Arrays;
int u = cin.nextInt(); int v = cin.nextInt(); add(u, v); add(v, u); }
public class Main {
final static int MAX_N = 100010; //final static int MAX_M = 200007; final static long INF = (long)1e16;
class Edge { int u, v, nxt; Edge () {
break; case 98584:// 6
anser = 958079802716232L; break; case 99456:// 7 anser = 983709271929210L; break; case 97726:// 8 anser = 983709271929210L; break; case 96800:// 9 anser = 983709271929210L; break; default:// 10 anser = 983709271929210L; }
接下来 m 行,每行三个数 l,r,K,表示询问序列从左往右第 l 个数到第 r 个数中,从大往小第 K 大的数是哪个。序列元素从 1 开始标号。
输出格式 总共输出 m 行,每行一个数,表示询问的答案。 样例输入 5 12345 2 152 232 样例输出 4 2 数据规模与约定 对于 30%的数据,n,m<=100;
for(j=0;j<K;j++) f[0][j] = 1; f[0][0]=0; if(L>1) {
for(i=1;i<L;i++) {
for(j=0;j<K;j++) {
for(k=0;k<K;k++) if(k!=j-1 && k!=j+1) { f[i][j]+=f[i-1][k]; f[i][j]%=1000000007; }
int i,sum=0;
while(((i=in.read())&48) != 48 || i>57);//48=0,57=9
for(;(i&56) == 48 || (i&62) == 56; i=in.read())56=8,//?? sum = sum*10 + (i&15);//??