蓝桥杯

蓝桥杯:超级玛丽(带限制的走楼梯问题)递归解法

拥有回忆 提交于 2020-01-29 11:44:34
蓝桥杯:超级玛丽(带限制的走楼梯问题)递归解法 问题描述 大家都知道"超级玛丽"是一个很善于跳跃的探险家,他的拿手好戏是跳跃,但它一次只能向前跳一步或两步。有一次,他要经过一条长为n的羊肠小道,小道中有m个陷阱,这些陷阱都位于整数位置,分别是a1,a2,…am,陷入其中则必死无疑。显然,如果有两个挨着的陷阱,则玛丽是无论如何也跳过不去的。   现在给出小道的长度n,陷阱的个数及位置。求出玛丽从位置1开始,有多少种跳跃方法能到达胜利的彼岸(到达位置n)。 输入格式   第一行为两个整数n,m   第二行为m个整数,表示陷阱的位置 输出格式   一个整数。表示玛丽跳到n的方案数 样例输入 4 1 2 样例输出 1 数据规模和约定   40>=n>=3,m>=1   n>m;   陷阱不会位于1及n上 思路 其实就是走楼梯,只是有的地方不给走,就dfs暴力解就好了,和那个八皇后一样的 从 第 1 个位置,可以走一步,或者两步 从位置1到终点的解法数目,等于【从位置2到终点的解法数目】+【从位置3到终点的解法数目】 走之前判断下能不能走(是否有陷阱) AC完整代码 # include <iostream> using namespace std ; # define maxlen 44 # define trap 114 # define safe 514 int n , m ; int

第七届蓝桥杯省赛B组整理

假如想象 提交于 2020-01-28 13:00:29
煤球数目 有一堆煤球,堆成三角棱锥形。具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第四层10个(排列成三角形), .... 如果一共有100层,共有多少个煤球? 请填表示煤球总数目的数字。 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。 solve: 这个题很好想,找出规律后,循环相加就行。 第一层放1个,第二层3个, 第三层6个, 第四层10个。 得出规律:array[i]=i+arr[i-1] (从i为1 开始) 1 #include<iostream> 2 using namespace std; 3 4 int arr[101]; 5 6 int main() 7 { 8 int sum=0; 9 for(int i=1;i<=100;i++){ 10 arr[i]=i+arr[i-1]; 11 sum+=arr[i]; 12 } 13 cout<<sum<<endl; 14 return 0; 15 } View Code 来源: https://www.cnblogs.com/suifengfengyi/p/12237815.html

蓝桥杯 基础练习 十六进制转八进制

流过昼夜 提交于 2020-01-28 05:58:29
问题描述 给定n个十六进制正整数,输出它们对应的八进制数。 输入格式 输入的第一行为一个正整数n (1<=n<=10)。 接下来n行,每行一个由0 9、大写字母A F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。 输出格式 输出n行,每行为输入对应的八进制正整数。 样例输入 2 39 123ABC 样例输出 71 4435274 好久没做水题了,结果被这卡了近半个小时,一直超时,我看了很久的AC代码,然后把外部调用的函数都写在了main函数里面,就过了……😭,所以,亲们蓝桥杯还是少调用函数叭,能写在主函数里就写在主函数里,思路很简单,十六进制转二进制,再转八进制就OK了: # include <bits/stdc++.h> using namespace std ; int main ( ) { int t ; cin >> t ; char s [ 100005 ] ; while ( t -- ) { scanf ( "%s" , s ) ; string s1 = "" ; int len = strlen ( s ) ; for ( int i = 0 ; i < len ; i ++ ) { if ( s [ i ] == '0' ) s1 + = "0000" ; if ( s [ i ] == '1' ) s1 + = "0001"

蓝桥杯 基础练习 数列特征

拥有回忆 提交于 2020-01-27 07:00:14
问题描述 给出n个数,找出这n个数的最大值,最小值,和。 输入格式 第一行为整数n,表示数的个数。 第二行有n个数,为给定的n个数,每个数的绝对值都小于10000。 输出格式 输出三行,每行一个整数。第一行表示这些数中的最大值,第二行表示这些数中的最小值,第三行表示这些数的和。 样例输入 5 1 3 -2 4 5 样例输出 5 -2 11 数据规模与约定 1 <= n <= 10000。 # include <stdio.h> # include <string.h> # include <iostream> using namespace std ; int main ( ) { int i , j , n , sum = 0 , max , min ; cin >> n ; int a [ n ] ; for ( i = 0 ; i < n ; i ++ ) cin >> a [ i ] ; max = min = a [ 0 ] ; for ( i = 0 ; i < n ; i ++ ) { sum + = a [ i ] ; if ( max < a [ i ] ) max = a [ i ] ; if ( min > a [ i ] ) min = a [ i ] ; } cout << max << endl ; cout << min << endl ; cout

表达式计算(蓝桥杯)

北慕城南 提交于 2020-01-27 05:37:36
问题描述   输入一个只包含加减乖除和括号的合法表达式,求表达式的值。其中除表示整除。 输入格式   输入一行,包含一个表达式。 输出格式   输出这个表达式的值。 样例输入 1-2+3*(4-5) 样例输出 -4 数据规模和约定   表达式长度不超过100,表达式运算合法且运算过程都在int内进行。 分析(起初不会做,在网上找的题解,分析的很详细,讲了先转换为 中缀表达式,在转换为后缀表达式,主要是入栈和出栈): 1.将中缀表达式转换为后缀表达式的方法: (1) 初始化两个栈:运算符栈S1和储存中间结果的栈S2; (2) 从左至右扫描中缀表达式; (3) 遇到操作数时,将其压入S2,这里由于运算数可能大于10,所以如果数字后面一个符号是运算符,则将‘#’入S2栈充当分割线; (4) 遇到运算符时有三种情况: (4-1) 三种情况下直接入S1栈①S1为空②运算符为‘(’③运算符优先级比S1栈顶运算符的高; (4-2)如果右括号“)”,则依次弹出S1栈顶的运算符,并压入S2,直到遇到左括号为止,此时将这一对括号丢弃; (4-3) 若运算符优先级小于或等于S1栈顶运算符的优先级,则依次弹出S1栈顶元素,直到运算符的优先级大于S1栈顶运算符优先级; (6) 重复步骤(2)至(5),直到表达式的最右边; (7) 将S1中剩余的运算符依次弹出并压入S2; (8) 依次弹出S2中的元素并输出

蓝桥杯入门训练

允我心安 提交于 2020-01-26 23:54:25
原题链接: http://lx.lanqiao.cn/problem.page?gpid=T4 入门训练: Fibonacci数列Description Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。Input输入描述: 输入包含一个整数n。 输入样例: 10 输出描述: 输出一行,包含一个整数,表示Fn除以10007的余数。 说明:在本题中,答案是要求Fn除以10007的余数,因此我们只要能算出这个余数即可,而不需要先计算出Fn的准确值,再将计算的结果除以10007取余数,直接计算余数往往比先算出原数再取余简单。 输出样例: 55 时间限制:1.0s 内存限制:256.0MB 1 <= n <= 1,000,000。 重点语句: 计算出余数即可 不需要计算Fn的准确值 解题思路: 加法和对数取余的结果与分开取余的结果相同 即:(a + b) % c == a % c + b % c you can try it: (3 + 4) % 2 = 1 3 % 2 = 1 plus 4 % 2 = 0 is 1, so it's right! 代码展示 # include <stdio.h> int main ( void ) { int i , index , i_num ;

蓝桥杯:组队 暴力解法

僤鯓⒐⒋嵵緔 提交于 2020-01-25 10:50:12
蓝桥杯:组队 暴力解法 【问题描述】 作为篮球队教练,你需要从以下名单中选出 1 号位至 5 号位各一名球员,组成球队的首发阵容。 每位球员担任 1 号位至 5 号位时的评分如下表所示。请你计算首发阵容 1号位至 5 号位的评分之和最大可能是多少? 试题 A: 组队 2第十届蓝桥杯大赛软件类省赛 C/C++ 大学 B 组 编号 1 号位 2 号位 3 号位 4 号位 5 号位 97 90 0 0 0 92 85 96 0 0 0 0 0 0 93 0 0 0 80 86 89 83 97 0 0 82 86 0 0 0 0 0 0 87 90 0 97 96 0 0 0 0 89 0 0 95 99 0 0 0 0 0 96 97 0 0 0 0 93 98 94 91 0 0 0 0 83 87 0 0 0 0 98 97 98 0 0 0 93 86 98 83 99 98 81 93 87 92 96 98 0 0 0 89 92 0 99 96 95 81 (如果你把以上文字复制到文本文件中,请务必检查复制的内容是否与文档中的一致。在试题目录下有一个文件 team.txt,内容与上面表格中的相同,请注意第一列是编号) 【答案提交】 这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。 答案 490

蓝桥杯:数的分解 朴素解法

ε祈祈猫儿з 提交于 2020-01-24 18:07:14
蓝桥杯:数的分解 朴素解法 刚刚写了个递归的 后来想了一下,好像没这么麻烦的。。。直接for起来,求就完事了 去重的方法: 令三个数字为 n1,n2, n3,满足 n1 < n2 < n3 即可去重 因为 n1+n2+n3 = 2019,那么确定了n1, n2,n3就确定了,然后判断就行了 代码 # include <iostream> using namespace std ; int no_24 ( int x ) { while ( x ) { if ( x % 10 == 2 || x % 10 == 4 ) { return 0 ; } x / = 10 ; } return 1 ; } int main ( ) { int n = 2019 ; int cnt = 0 ; // n1=i, n2=j, n3=n-i-j for ( int i = 1 ; i < n / 3 ; i ++ ) { if ( no_24 ( i ) ) { for ( int j = i + 1 ; j < n - i - j ; j ++ ) { if ( no_24 ( n - i - j ) && no_24 ( j ) ) { cnt + = 1 ; } } } } cout << cnt << endl ; return 0 ; } 来源: CSDN 作者: weixin

蓝桥杯-FJ的字符串

情到浓时终转凉″ 提交于 2020-01-24 09:45:24
蓝桥杯-FJ的字符串 思想 A ABA ABACABA ABACABADABACABA 重复出现上一次的An中间添加下一个新的字母 所以决定用递归 但是有个疑问不知道可不可以把上一次的存在数组然后再输出两次 问题描述  FJ在沙盘上写了这样一些字符串:   A1 = “A”   A2 = “ABA”   A3 = “ABACABA”   A4 = “ABACABADABACABA”   … …   你能找出其中的规律并写所有的数列AN吗?输入格式  仅有一个数:N ≤ 26。输出格式  请输出相应的字符串AN,以一个换行符结束。输出中不得含有多余的空格或换行、回车符。样例输入3样例输出ABACABA # include <stdio.h> void A ( int n ) ; int main ( ) { int n ; scanf ( "%d" , & n ) ; A ( n ) ; return 0 ; } void A ( int n ) { int i ; if ( n == 1 ) printf ( "A" ) ; for ( i = 2 ; i <= n ; i ++ ) { if ( i <= 2 ) A ( i - 1 ) ; printf ( "%c" , 64 + i ) ; A ( i - 1 ) ; } } 来源: CSDN 作者: dm48-旭 链接:

【蓝桥杯】【入门】序列求和

亡梦爱人 提交于 2020-01-23 16:38:51
问题描述 求1+2+3+…+n的值。 输入格式 输入包括一个整数n。 输出格式 输出一行,包括一个整数,表示1+2+3+…+n的值。 样例输入 4 样例输出 10 样例输入 100 说明:有一些试题会给出多组样例输入输出以帮助你更好的做题。 一般在提交之前所有这些样例都需要测试通过才行,但这不代表这几组样例数据都正确了你的程序就是完全正确的,潜在的错误可能仍然导致你的得分较低。 样例输出 5050 数据规模与约定 1 <= n <= 1,000,000,000。 说明:请注意这里的数据规模。 本题直接的想法是直接使用一个循环来累加,然而,当数据规模很大时,这种“暴力”的方法往往会导致超时。此时你需要想想其他方法。你可以试一试,如果使用1000000000作为你的程序的输入,你的程序是不是能在规定的上面规定的时限内运行出来。 本题另一个要值得注意的地方是答案的大小不在你的语言默认的整型(int)范围内,如果使用整型来保存结果,会导致结果错误。 如果你使用C++或C语言而且准备使用printf输出结果,则你的格式字符串应该写成%I64d以输出long long类型的整数。 #include <stdio.h> using namespace std; int main() { long long n; scanf("%I64d", &n); if (n % 2 == 0) n = (n