蓝桥杯

1465: [蓝桥杯2019初赛]特别数的和

£可爱£侵袭症+ 提交于 2020-02-07 05:48:42
时间限制: 1 Sec 内存限制: 256 MB 题目描述 小明对数位中含有2、0、1、9 的数字很感兴趣(不包括前导0) 在1到40中这样的数包括1、2、9、10 至32、39 和40,共28 个,他们的和是574。 请问,在1到n 中,所有这样的数的和是多少? 输入 输入一个正整数n(1<=n<=10000) 输出 输出一行,包含一个整数,表示满足条件的数的和。 样例输入 40 样例输出 574 代码: # include <bits/stdc++.h> using namespace std ; int n ; long long ans = 0 ; int main ( ) { cin >> n ; for ( int i = 1 ; i <= n ; i ++ ) { int t = i , flag = 0 ; while ( t ) { int k = t % 10 ; if ( k == 0 || k == 1 || k == 2 || k == 9 ) { flag = 1 ; break ; } t / = 10 ; } if ( flag ) ans + = i ; } cout << ans << endl ; return 0 ; } 来源: CSDN 作者: 学算法的小菜鸟 链接: https://blog.csdn.net/qq_42090769

2012年第三届蓝桥杯C/C++程序设计本科B组省赛 取球博弈

一曲冷凌霜 提交于 2020-02-07 03:09:35
2012年第三届蓝桥杯C/C++程序设计本科B组省赛 取球博弈 题目描述 **取球博弈 今盒子里有n个小球,A、B两人轮流从盒中取球,每个人都可以看到另一个人取了多少个,也可以看到盒中还剩下多少个,并且两人都很聪明,不会做出错误的判断。 我们约定: 每个人从盒子中取出的球的数目必须是:1,3,7或者8个。 轮到某一方取球时不能弃权! A先取球,然后双方交替取球,直到取完。 被迫拿到最后一个球的一方为负方(输方) 请编程确定出在双方都不判断失误的情况下,对于特定的初始球数,A是否能赢? 程序运行时,从标准输入获得数据,其格式如下: 先是一个整数n ( n < 100 ) ,表示接下来有n个整数。然后是n个整数,每个占一行(整数 < 10000),表示初始球数。 程序则输出n行,表示A的输赢情况(输为0,赢为1)。 例如,用户输入: 4 1 2 10 18 则程序应该输出: 0 1 1 0 注意: 请仔细调试!您的程序只有能运行出正确结果的时候才有机会得分! 在评卷时使用的输入数据与试卷中给出的实例数据可能是不同的。 请把所有函数写在同一个文件中,调试好后,存入与【考生文件夹】下对应题号的“解答.txt”中即可。 相关的工程文件不要拷入。 源代码中不能能使用诸如绘图、Win32API、中断调用、硬件操作或与操作系统相关的API。 允许使用STL类库,但不能使用MFC或ATL等非ANSI

蓝桥杯 ADV-16 算法提高 和最大子序列

放肆的年华 提交于 2020-02-06 05:24:29
算法提高 和最大子序列 时间限制:1.0s 内存限制:512.0MB 问题描述   对于一个给定的长度为N的整数序列A,它的“子序列”的定义是:A中非空的一段连续的元素(整数)。你要完成的任务是,在所有可能的子序列中,找到一个子序列,该子序列中所有元素的和是最大的(跟其他所有子序列相比)。程序要求你输出这个最大值。 输入格式   输入文件的第一行包含一个整数N,第二行包含N个整数,表示A。   其中   1 <= N <= 100000   -10000 <= A[i] <=  10000 输出格式   输出仅包含一个整数,表示你算出的答案。 样例输入 5 3 -2 3 -5 4 样例输出 4 分析:设 为以 为结尾的连续子数组中的最大和,其递推关系式为 该式可以这样理解:以 为结尾的、有最大和的连续子数组要么是以 为开头、以 为结尾的单一元素数组,要么是以从 到 之间的某个元素为开始,经过 ,并以 ​​​​​​​为结尾的数组。该式的初始条件为 题目要求的最大和即为 。 #include <stdio.h> int max(int a, int b) { return a > b ? a : b; } int main() { int N; int A[100005] = { 0 }; scanf("%d", &N); for (int i = 0; i < N; ++i)

2015年蓝桥杯 题7 加法变乘法 列举 (提交整数)

泄露秘密 提交于 2020-02-06 04:26:03
题目: 加法变乘法 我们都知道:1+2+3+ … + 49 = 1225 现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015 比如: 1+2+3+…+10 11+12+…+27 28+29+…+49 = 2015 就是符合要求的答案。 请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交10)。 注意:需要你提交的是一个整数,不要填写任何多余的内容。 ——————————————————————————————————— # include <iostream> using namespace std ; int main ( ) { int a [ 49 ] ; for ( int i = 1 ; i <= 49 ; i ++ ) a [ i - 1 ] = i ; for ( int i = 0 ; i < 48 ; i ++ ) { for ( int j = i + 2 ; j < 48 ; j ++ ) { //相邻的不能所以要加i+2 int sum = 1225 - a [ i ] - a [ i + 1 ] - a [ j ] - a [ j + 1 ] ; int cheng = a [ i ] * a [ i + 1 ] ; //第一个乘数 int cheng2 = a [ j ] * a [ j + 1 ] ; /

蓝桥杯真题-分考场

。_饼干妹妹 提交于 2020-02-05 23:48:21
题目链接: http://lx.lanqiao.cn/problem.page?gpid=T457 问题描述:   n个人参加某项特殊考试。   为了公平,要求任何两个认识的人不能分在同一个考场。   求是少需要分几个考场才能满足条件。 输入格式:   第一行,一个整数n(1<n<100),表示参加考试的人数。   第二行,一个整数m,表示接下来有m行数据   以下m行每行的格式为:两个整数a,b,用空格分开 (1<=a,b<=n) 表示第a个人与第b个人认识。 输出格式:   一行一个整数,表示最少分几个考场。 思路: 求出安排这些考生最少需要的考场数目num 开始:没有考场,num=0 安排第一个人a:新建一个考场,num=1 安排第二个人b:判断b与a的关系, 若认识,我们只有一种选择,新建考场,num=2 若不认识,我们可以有两种选择,与a在同一个考场,或者新建考场,我们目前不知道这两种选择哪种最优------ 这时候,我们想到该题应该要使用到回溯 每一个考生都有两种选择:新建考场,选择已建的某个考场 此题类似图着色问题: https://baike.baidu.com/item/%E5%9B%BE%E7%9D%80%E8%89%B2%E9%97%AE%E9%A2%98/8928655?fr=aladdin , 一个无向图着色,要求相邻的点不能是同色,方案有多种

蓝桥杯,特殊回文数,Python

会有一股神秘感。 提交于 2020-02-05 12:26:33
题目 问题描述   123321是一个非常特殊的数,它从左边读和从右边读是一样的。   输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。 输入格式   输入一行,包含一个正整数n。 输出格式   按从小到大的顺序输出满足条件的整数,每个整数占一行。 样例输入 52 样例输出 899998 989989 998899 数据规模和约定   1<=n<=54。 解法一 我们首先想到的就是遍历所有五位数和六位数,将数字转成字符串再逆转然后判断是否为回文数,接着求各位数字之和判断是否等于n,满足以上两个条件就是答案。 n = int(input('')) for i in range(10000, 1000000): num = str(i) s = sum(int(j) for j in num) if s == n and num == num[::-1]: print(num) 以上代码提交显示运行超时。仔细一想不难发现这里其实是二重循环,因为sum()函数求和过程其实也是一个循环,从而导致算法复杂度增大。下面我们看改进代码: n = int(input('')) for i in range(10000, 1000000): num = str(i) if num == num[::-1]: if n == sum(int(j) for j in

2016第七届蓝桥杯JavaB组省赛真题详解

只愿长相守 提交于 2020-02-05 03:33:38
2016第七届蓝桥杯JavaB组省赛真题及详解 第一题:煤球数目 第二题:生日蜡烛 第三题:凑算式 第四题:分小组 第五题:抽签 第六题:方格填数 第七题:剪邮票 第八题:四平方和 第九题:取球博弈 第十题:压缩变换 第一题:煤球数目 题目描述: 有一堆煤球,堆成三角棱锥形。具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第四层10个(排列成三角形), … 如果一共有100层,共有多少个煤球? 请填表示煤球总数目的数字。 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。 思路: 此题是一个找规律的题,规律比较好发现,第1层就是1,第二层就是1+2,第三层就是1+2+3,第n层就是1+2+3+、、、+n public class Main { private static int f ( int n ) { // 算第n层有多少个 int res = 0 ; for ( int i = 1 ; i <= n ; i ++ ) { res += i ; } return res ; } private static int cal ( int n ) { int res = 0 ; for ( int i = 1 ; i <= n ; i ++ ) { res += f ( i ) ; } return res ; } public

2017第八届蓝桥杯JavaB组省赛真题加详解

﹥>﹥吖頭↗ 提交于 2020-02-04 16:52:38
2017第八届蓝桥杯JavaB组省赛真题及详解 第一题:购物单 第二题:纸牌三角形 第三题:承压计算 第四题:魔方状态 第五题:取数位 第六题:最大公共子串 第七题:日期问题 第八题:包子凑数 第九题:分巧克力 第十题:k倍区间 第一题:购物单 题目描述: 小明刚刚找到工作,老板人很好,只是老板夫人很爱购物。老板忙的时候经常让小明帮忙到商场代为购物。小明很厌烦,但又不好推辞。 这不,XX大促销又来了!老板夫人开出了长长的购物单,都是有打折优惠的。 小明也有个怪癖,不到万不得已,从不刷卡,直接现金搞定。 现在小明很心烦,请你帮他计算一下,需要从取款机上取多少现金,才能搞定这次购物。 取款机只能提供100元面额的纸币。小明想尽可能少取些现金,够用就行了。 你的任务是计算出,小明最少需要取多少现金。 以下是让人头疼的购物单,为了保护隐私,物品名称被隐藏了。 **** 180.90 88折 **** 10.25 65折 **** 56.14 9折 **** 104.65 9折 **** 100.30 88折 **** 297.15 半价 **** 26.75 65折 **** 130.62 半价 **** 240.28 58折 **** 270.62 8折 **** 115.87 88折 **** 247.34 95折 **** 73.21 9折 **** 101.00 半价 ****

蓝桥杯 ALGO-90 出现次数最多的整数

|▌冷眼眸甩不掉的悲伤 提交于 2020-02-04 04:46:59
题意:给定一组数据,求出出现次数最多的那个整数,如果有多个相同的,取值较小的。 思路:首先,用map集合保存数字出现的次数,然后对map集合进行迭代,max保存出现次数最多的次数,ans保存的是值,当出现的值大于max或者等于max且值比当前的ans小时进行替换,最后输出ans 注意:可能出现不输出的情况,所以最后要进行判断是否又输入,即n>0,输出ans 代码: #include <iostream> #include<vector> #include<map> using namespace std; int main(int argc, char** argv) { int n,tem; cin>>n; map<int,int> p;//保存的是值,出现次数 for(int i=0;i<n;i++){//输入所有的值 scanf("%d",&tem); p[tem]++; } int max = -1,ans = 99999999;//max保存出现次数最多的,ans其对应的值 for(map<int,int>::iterator it=p.begin();it!=p.end();it++){ if((*it).second>max||((*it).second==max&&(*it).first<ans)){ ans = (*it).first; max = (*it)

蓝桥杯训练 日期训练

对着背影说爱祢 提交于 2020-02-04 03:07:19
这道题做起来还是有些麻烦的,做了一个小时多点,码力不行呀。。。 思路: 首先输入a的年月日,b存储2011,11,11,交换两个日期变量,让日期a 存储较小的日期,日期b存储较大的。 我们需要计算出两个日期之间相差多少天,我想的是计算 a日期所在年过去了多少天sum1,再计算b日期所在年还有多天没过sum2,最后用a的年份到b的年份的总天数-(sum1+sum2),得到两个日期差了多少天。 最后还得分类一下两个日期是否交换过,有无交换过处理不同。。注释有。。 代码 #include <iostream> #include <malloc.h> #include <cstdio> #include <algorithm> #include <queue> #include <cstring> using namespace std; typedef long long LL; const int maxn = 1000 + 10; const int inf = 0x3f3f3f3f; int c[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; struct Data { int year, month, day; }; bool check(int n) { if ((n % 100 != 0 && n % 4