蓝桥杯

蓝桥杯 猴子分苹果

依然范特西╮ 提交于 2020-04-07 20:40:10
问题描述   秋天到了,n只猴子采摘了一大堆苹果放到山洞里,约定第二天平分。这些猴子很崇拜猴王孙悟空,所以都想给他留一些苹果。第一只猴子悄悄来到山洞,把苹果平均分成n份,把剩下的m个苹果吃了,然后藏起来一份,最后把剩下的苹果重新合在一起。这些猴子依次悄悄来到山洞,都做同样的操作,恰好每次都剩下了m个苹果。第二天,这些猴子来到山洞,把剩下的苹果分成n分,巧了,还是剩下了m个。问,原来这些猴子至少采了多少个苹果。 输入格式   两个整数,n m 输出格式   一个整数,表示原来苹果的数目 样例输入 5 1 样例输出 15621 数据规模和约定   0<m<n<9 转载自https://blog.csdn.net/liulizhi1996/article/details/103991784?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-24&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-24 1 #include <bits/stdc++.h> 2 using namespace std; 3 int f(int a, int b) { 4 int ans = 1; 5 for (int

蓝桥杯 矩阵乘法 模拟

吃可爱长大的小学妹 提交于 2020-04-05 18:01:11
问题描述   输入两个矩阵,分别是m*s,s*n大小。输出两个矩阵相乘的结果。 输入格式   第一行,空格隔开的三个正整数m,s,n(均不超过200)。   接下来m行,每行s个空格隔开的整数,表示矩阵A(i,j)。   接下来s行,每行n个空格隔开的整数,表示矩阵B(i,j)。 输出格式   m行,每行n个空格隔开的整数,输出相乘後的矩阵C(i,j)的值。 样例输入 2 3 2 1 0 -1 1 1 -3 0 3 1 2 3 1 样例输出 -3 2 -8 2 提示 矩阵C应该是m行n列,其中C(i,j)等于矩阵A第i行行向量与矩阵B第j列列向量的内积。 例如样例中C(1,1)=(1,0,-1)*(0,1,3) = 1 * 0 +0*1+(-1)*3=-3 解题思路:三层for循环注意嵌套顺序 1 #include <bits/stdc++.h> 2 using namespace std; 3 const int N = 210; 4 int a[N][N], b[N][N], c[N][N]; 5 int main() { 6 int m, s, n; 7 cin >> m >> s >> n; 8 for (int i = 0; i < m; i++) { 9 for (int j = 0; j < s; j++) { 10 cin >> a[i][j]; 11 } 12 }

蓝桥杯算法训练<二>

a 夏天 提交于 2020-04-04 08:44:00
一、 最小乘积(基本型) 【这个题需要认真阅读试题,内容量较大,刚开始的时候,由于练习系统上给出的输入输出的格式有问题,没看懂,最后在MikCu的博客上看到了正确的格式,参考了代码,最终得到正确的结果。为了让结果最小, 可以先分别对两组数进行排序,然后对其中的一组数据逆序,逆序后,把两组数据最大的与最小的相乘,最后求得的和最小! 】 问题描述   给两组数,各n个。   请调整每组数的排列顺序,使得两组数据相同下标元素对应相乘,然后相加的和最小。要求程序输出这个最小值。   例如两组数分别为:1 3  -5和-2 4 1   那么对应乘积取和的最小值应为:   (-5) * 4 + 3 * (-2) + 1 * 1 = -25 输入格式    第一个行一个数T表示数据组数。后面每组数据,先读入一个n,接下来两行每行n个数,每个数的绝对值小于等于1000。   n<=8,T<=1000 输出格式   一个数表示答案。 样例输入   2    //两组数据   3    //每行三个数   1 3 -5   -2 4 1   5    //每行五个数   1 2 3 4 5   1 0 1 0 1 样例输出   -25   6 1 import java.util.Arrays; 2 import java.util.Scanner; 3 4 public class Main { 5

第八届蓝桥杯省赛第二题---等差素数列

徘徊边缘 提交于 2020-04-04 04:17:47
标题:等差素数列 2,3,5,7,11,13,....是素数序列。 类似:7,37,67,97,127,157 这样完全由素数组成的等差数列,叫等差素数数列。 上边的数列公差为30,长度为6。 2004年,格林与华人陶哲轩合作证明了:存在任意长度的素数等差数列。 这是数论领域一项惊人的成果! 有这一理论为基础,请你借助手中的计算机,满怀信心地搜索: 长度为10的等差素数列,其公差最小值是多少? 注意:需要提交的是一个整数,不要填写任何多余的内容和说明文字。 分析:这道题目思路挺简单的,就是用线性筛选法把10^6内的素数筛选出来,然后从大到小枚举然后去验证 关键是一定要掌握线性筛选法。。。 1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 #define ll long long 5 const int maxn=1e6; 6 int check[maxn]={0}; 7 int prime[maxn]; 8 int pos; 9 10 void init(){//线性筛选法 11 for( ll i=2; i<maxn; i++ ){ 12 if(!check[i]){ 13 prime[pos++]=i; 14 } 15 for( ll j=0; j<pos&&i*prime[j]<maxn; j++

第七届蓝桥杯 方格填数

大兔子大兔子 提交于 2020-04-01 08:44:28
转载请注明出处:http://www.cnblogs.com/zhishoumuguinian/p/8359473.html 方格填数 如下的10个格子, 填入0~9的数字。要求:连续的两个数字不能相邻。 (左右、上下、对角都算相邻) 一共有多少种可能的填数方案? 请填写表示方案数目的整数。 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。 1 #include <math.h> 2 #include <iostream> 3 using namespace std; 4 5 int ans = 0, flag[10] = {0};//flag数组标志数字是否已经填在方格中 6 7 8 int Check(int a[][4], int x, int y)//检查填在位置上的数组是否和法,不合法返回0, 9 { 10 if(x!=0)//如果不是第一行,那么就检查他上方的数 11 { 12 if(fabs(a[x][y]-a[x-1][y])==1) return 0; 13 } 14 if(y!=0)//如果不是第一列,检查前一个数。 15 { 16 if(fabs(a[x][y]-a[x][y-1])==1) return 0; 17 } 18 if(x>0&&y<3)//如果不是第一行,并且不是最后一列,检查右上方 19 { 20 if(fabs(a[x]

蓝桥杯 数字游戏 暴力

我怕爱的太早我们不能终老 提交于 2020-03-31 10:28:25
问题描述   给定一个1~N的排列a[i],每次将相邻两个数相加,得到新序列,再对新序列重复这样的操作,显然每次得到的序列都比上一次的序列长度少1,最终只剩一个数字。   例如:   3 1 2 4   4 3 6   7 9   16   现在如果知道N和最后得到的数字sum,请求出最初序列a[i],为1~N的一个排列。若有多种答案,则输出字典序最小的那一个。数据保证有解。 输入格式   第1行为两个正整数n,sum 输出格式   一个1~N的一个排列 样例输入 4 16 样例输出 3 1 2 4 数据规模和约定   0<n<=10 解题思路:参考自https://blog.csdn.net/ITmincherry/article/details/105171493 直接枚举所有全排列,判断这个排列操作到最后的值是否等于所给的sum n个数的全排列有n!个。 n个数排位置,第一个位置可以放n个数中的任意一个,第二个位置可以放除了第一个放的数之外的n-1个数的任意一个,即n*(n-1)*(n-2)*...*1=n! 时间复杂度最坏的情况10!,暴力可过。 1 #include <bits/stdc++.h> 2 using namespace std; 3 vector<int> a; 4 int main() { 5 int n, sum; 6 cin >> n >> sum;

蓝桥杯---最大子阵

醉酒当歌 提交于 2020-03-30 08:45:08
问题描述   给定一个n*m的矩阵A,求A中的一个非空子矩阵,使这个子矩阵中的元素和最大。   其中,A的子矩阵指在A中行和列均连续的一块。 输入格式   输入的第一行包含两个整数n, m,分别表示矩阵A的行数和列数。   接下来n行,每行m个整数,表示矩阵A。 输出格式   输出一行,包含一个整数,表示A中最大的子矩阵中的元素和。 样例输入 3 3 -1 -4 3 3 4 -1 -5 -2 8 样例输出 10 样例说明   取最后一列,和为10。 数据规模和约定   对于50%的数据,1<=n, m<=50;   对于100%的数据,1<=n, m<=500,A中每个元素的绝对值不超过5000。 因为要求所有的行列都是连续的,因此我们枚举所有可能情况就行了,但这里有一个技巧,我们可以提前处理好每一列的前n行的和,然后枚举的时候只需枚举一个行的开始,和行的结束,然后对这个范围的所有列(即m的值)进行最大子段和的dp就OK啦,这一过程中不断维护最大值; 其实最后还是转化为求一维数组的最大子段和的最大值 虽然这道题比较简单,但是比较典型,也算是个DP吧。。。 #include <iostream> #include <cstring> using namespace std; #define inf 0x3f3f3f3f; int n,m; int a[505][505],b[505]

蓝桥杯javaB组入坑

瘦欲@ 提交于 2020-03-28 17:19:03
蓝桥杯Java B组 准备工作 练习入口 | 准备资料 | 查阅说明 编辑环境 我们建议您使用大赛指定的编辑环境来编写你的代码,以保证评测时和我们的编译环境一致,同时和比赛时使用的环境也一致。 推荐的编辑环境如下: 语言 编辑环境 下载地址 C++ Dev-CPP SourceForge上的Dev-CPP C Dev-CPP SourceForge上的Dev-CPP JAVA Eclipse Eclipse PYTHON IDLE Python 对于不同的语言,系统的编译环境如下: 语言 编译环境/解释器 编译选项 C++ g++ (GCC) 4.9.2 g++ code.cpp -O2 -Wl,--stack=268435456 -DONLINE_JUDGE C gcc (GCC) 4.9.2 gcc code.c -O2 -Wl,--stack=268435456 -DONLINE_JUDGE JAVA Javac 1.8.0 javac Main.java PYTHON Python 3.8.0 如果你使用Java语言,对于所有的试题,你的主类名称都必须是 Main 。 C/C++语言中,主函数main的返回值类型必须是 int ,返回值必须是 0 ,否则评测会认为程序运行错误。 学生机环境-Java编程环境及API帮助文档 链接: https://pan.baidu.com

【c语言】蓝桥杯算法提高 P0401

十年热恋 提交于 2020-03-17 15:16:15
问题描述 输入一个无符号整数x,输出x的二进制表示中1的个数. 输入 :   76584 输出 :   7 # include <stdio.h> int main ( int argc , char * argv [ ] ) { unsigned int n ; scanf ( "%d" , & n ) ; int cnt = 0 ; while ( n ) { if ( n & 1 ) //位运算,判断n的二进制位是否为0,n=1为真,非0为假 cnt ++ ; n >>= 1 ; //n的二进制位向右移动一位,判断是否等于1;即n=n>>1 } printf ( "%d\n" , cnt ) ; return 0 ; } 来源: CSDN 作者: 折腾的小飞 链接: https://blog.csdn.net/qq_41666142/article/details/104919183

蓝桥杯算法练习笔记(13)__背包问题

只谈情不闲聊 提交于 2020-03-17 06:30:50
14.背包问题 1.0-1背包问题 例如:有5件物品,体积分别为[2,2,6,5,4],价值分别为[6,3,5,4,6] //0-1背包问题 # include <iostream> # include <cstdio> using namespace std ; int c [ 105 ] ; //每件物品的体积 int w [ 105 ] ; //每件物品的价值 int dp [ 105 ] [ 105 ] ; int main ( ) { int n , v ; //n件物品 最大可用体积为v cin >> n >> v ; for ( int i = 1 ; i <= n ; i ++ ) { cin >> w [ i ] >> c [ i ] ; } for ( int i = 1 ; i <= n ; i ++ ) { //前i个物品 for ( int j = 0 ; j <= v ; j ++ ) { //总重量不超过j if ( j >= c [ i ] ) { // 最大价值 dp[i][j] dp [ i ] [ j ] = max ( dp [ i - 1 ] [ j - c [ i ] ] + w [ i ] , dp [ i - 1 ] [ j ] ) ; } else { //不放,继承上一次数据 dp [ i ] [ j ] = dp [ i - 1