蓝桥杯

蓝桥杯 BASIC-5 查找整数

扶醉桌前 提交于 2019-12-19 07:36:10
问题描述 给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。 输入格式 第一行包含一个整数n。 第二行包含n个非负整数,为给定的数列,数列中的每个数都不大于10000。 第三行包含一个整数a,为待查找的数。 输出格式 如果a在数列中出现了,输出它第一次出现的位置(位置从1开始编号),否则输出-1。 样例输入 6 1 9 4 8 3 9 9 样例输出 2 数据规模与约定 1 <= n <= 1000。 题意:给定n个数,然后求给定数的索引,思路很简单,就不写了 代码: #include <iostream> #include<stdio.h> using namespace std; int main(int argc, char** argv) { int n,target,flag = 0,index = -1; cin>>n; int a[n]; for(int i=0;i<n;i++){ cin>>a[i]; } cin>>target; for(int i=0;i<n;i++){ if(a[i]==target){ flag = 1; index = i+1; break; } } printf("%d\n",index==-1?-1:index); return 0; } 来源: CSDN 作者: tbywt 链接: https://blog.csdn

蓝桥杯 BASIC-7 特殊的数字

旧巷老猫 提交于 2019-12-19 00:57:46
问题描述   153是一个非常特殊的数,它等于它的每位数字的立方和,即153=1*1*1+5*5*5+3*3*3。编程求所有满足这种条件的三位十进制数。 输出格式   按从小到大的顺序输出满足条件的三位十进制数,每个数占一行。 题意:给定一个数,其每位的立方和等于自己,求这样的数 思路:用i,j,k三个变量分别代表百十个位,从100遍历到999,i*i*i+j*j*j+k*k*k表示其每位的立方和,i*100+j*10+k表示该数, 代码: #include <iostream> using namespace std; int main(int argc, char** argv) { for(int i=1;i<=9;i++){//i表示百位,j表示十位,k表示各位,从100遍历到999 for(int j=0;j<=9;j++){ for(int k=0;k<=9;k++){ if((i*i*i+j*j*j+k*k*k)==(i*100+j*10+k)){ cout<<i<<j<<k<<endl; } } } } return 0; } 来源: CSDN 作者: tbywt 链接: https://blog.csdn.net/qq_42152681/article/details/103602304

蓝桥杯 BASIC-3 字母图形

人走茶凉 提交于 2019-12-17 07:57:47
问题描述 利用字母可以组成一些美丽的图形,下面给出了一个例子: ABCDEFG BABCDEF CBABCDE DCBABCD EDCBABC 这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。 输入格式 输入一行,包含两个整数n和m,分别表示你要输出的图形的行数的列数。 输出格式 输出n行,每个m个字符,为你的图形。 样例输入 5 7 样例输出 ABCDEFG BABCDEF CBABCDE DCBABCD EDCBABC 数据规模与约定 1 <= n, m <= 26。 题意:给定n和m,然后输出n行m列的字母图形 思路:根据此题,可以看出打印字母的顺序与主要是与二重循环的下标的差值有关,把字母换成数字就比较容易看出规律了 代码: #include <iostream> #include<cmath> using namespace std; int main(int argc, char** argv) { int n,m; cin>>n>>m; for(int i=0;i<n;i++){//打印的字母主要是与二重循环的下标有关 for(int j=0;j<m;j++){ cout<<(char)('A'+abs(i-j)); } cout<<endl; } return 0; } 来源: CSDN 作者: tbywt 链接: https://blog

蓝桥杯算法训练 2的次幂表示

情到浓时终转凉″ 提交于 2019-12-17 00:42:22
如果可以,可以陪你千年不老,千年只想眷顾你倾城一笑;如果愿意,愿意陪你永世不离,永世只愿留恋你青丝白衣。 #include <iostream> #include <iostream> #include <cstdio> #include <algorithm> #include <string> #include <cstring> #include <cstdlib> #include <cmath> #include <stack> #include <queue> #include <set> #include <map> #include <vector> #include <ctime> #include <cctype> #include <bitset> #include <utility> #include <sstream> #include <complex> #include <iomanip> #define inf 0x3f3f3f3f typedef long long ll; using namespace std; int n; int dg(int x){ int ct=0,j=2,sup; if(x==2) cout<<"2";//如果是二直接输出 else{//不是二肯定还能分解 cout<<"2"; if(x==1)//若是一,即2的0次方

蓝桥杯练习

*爱你&永不变心* 提交于 2019-12-17 00:18:35
问题描述   有一长度为N(1<=N<=10)的地板,给定两种不同瓷砖:一种长度为1,另一种长度为2,数目不限。要将这个长度为N的地板铺满,一共有多少种不同的铺法?   例如,长度为4的地面一共有如下5种铺法:   4=1+1+1+1   4=2+1+1   4=1+2+1   4=1+1+2   4=2+2   编程用递归的方法求解上述问题。 输入格式   只有一个数N,代表地板的长度 输出格式   输出一个数,代表所有不同的瓷砖铺放方法的总数 样例输入 4 样例输出 5 #include<stdio.h> int f(int n) { if(n 1||n 2) return n; else return f(n-2)+f(n-1); } int main() { int i; scanf("%d",&i); printf("%d",f(i)); return 0; } 来源: CSDN 作者: Yang-xiaoxiong 链接: https://blog.csdn.net/qq_44342520/article/details/103569385

蓝桥杯 BASIC-4 数列特征

放肆的年华 提交于 2019-12-17 00:04:35
问题描述 给出n个数,找出这n个数的最大值,最小值,和。 输入格式 第一行为整数n,表示数的个数。 第二行有n个数,为给定的n个数,每个数的绝对值都小于10000。 输出格式 输出三行,每行一个整数。第一行表示这些数中的最大值,第二行表示这些数中的最小值,第三行表示这些数的和。 样例输入 5 1 3 -2 4 5 样例输出 5 -2 11 数据规模与约定 1 <= n <= 10000。 题意:给定一组数,求其最大值,最小值,总和; 思路:依次比较所有的数,在dev中可以直接用输入的后变量作为数组的个数,vs里面好像不可以,试了报错 代码: #include <iostream> using namespace std; int main(int argc, char** argv) { int n; cin>>n; int a[n]; for(int i=0;i<n;i++){ cin>>a[i]; } int min = a[0]; int max = a[0]; int sum = 0; for(int i=0;i<n;i++){ if(min>a[i])min = a[i]; if(max<a[i])max = a[i]; sum+=a[i]; } cout<<max<<endl; cout<<min<<endl; cout<<sum<<endl; return 0; }

蓝桥杯 第七届蓝桥杯省赛C++A/B组 四平方和

痞子三分冷 提交于 2019-12-16 09:25:24
四平方和定理,又称为拉格朗日定理: 每个正整数都可以表示为至多 4 个正整数的平方和。 如果把 0 包括进去,就正好可以表示为 4 个数的平方和。 比如: 5=0^2+0^2+1^2+2^2 7=1^2+1^2+1^2+2^2 对于一个给定的正整数,可能存在多种平方和的表示法。 要求你对 44 个数排序: 0≤a≤b≤c≤d 并对所有的可能表示法按 a,b,c,d 为联合主键升序排列,最后输出第一个表示法。 输入格式 输入一个正整数 N。 输出格式 输出4个非负整数,按从小到大排序,中间用空格分开。 数据范围 0<N<5∗10^6 输入样例: 5 输出样例: 0 0 1 2 0<N<5∗10^6,因此a,b,c,d的最大取值约为5000,而暴力三层循环时间复杂度会达到10^9,虽然这道题的三次循环也可以过,,, 更好的算法思路是: 用空间换时间,将3层循环换成两次的两层循环这样在时间复杂度上就是可以接受的了。 先一个二层循环将c^2 + d^2 存起来。 然后再来一个二层循环 看 n - a^2 - b^2 在之前算出来的c^2 + d^2 中查找看出现过没,如果出现过, 说明a^2 + b^2 + c^2 + d^2 == n 是成立的。 至于上面用的查找,为了加快速度可以用二分来进行查找 // 用map存储的 #include<iostream> #include

蓝桥杯2019 第4题 迷宫

此生再无相见时 提交于 2019-12-15 10:00:54
试题 E:迷宫 本题总分:15 分 【问题描述】 下图给出了一个迷宫的平面图,其中标记为 1 的为障碍,标记为 0 的为可 以通行的地方。 010000 000100 001001 110000 迷宫的入口为左上角,出口为右下角,在迷宫中,只能从一个位置走到这 个它的上、下、左、右四个方向之一。 对于上面的迷宫,从入口开始,可以按DRRURRDDDR 的顺序通过迷宫,一共 10 步。其中 D、U、L、R 分别表示向下、向上、向左、向右走。 对于下面这个更复杂的迷宫(30 行 50 列),请找出一种通过迷宫的方式, 其使用的步数最少,在步数最少的前提下,请找出字典序最小的一个作为答案。 请注意在字典序中D<L<R<U。(如果你把以下文字复制到文本文件中,请务必检查复制的内容是否与文档中的一致。在试题目录下有一个文件 maze.txt,内容与下面的文本相同) 01010101001011001001010110010110100100001000101010 00001000100000101010010000100000001001100110100101 01111011010010001000001101001011100011000000010000 01000000001010100011010000101000001010101011001011

蓝桥杯练习——删除数组零元素

随声附和 提交于 2019-12-15 00:35:31
从键盘读入n个整数放入数组中,编写函数CompactIntegers,删除数组中所有值为0的元素,其后元素向数组首端移动。注意,CompactIntegers函数需要接受数组及其元素个数作为参数,函数返回值应为删除操作执行后数组的新元素个数。输出删除后数组中元素的个数并依次输出数组元素。 样例输入: (输入格式说明:5为输入数据的个数,3 4 0 0 2 是以空格隔开的5个整数) 5 3 4 0 0 2 样例输出:(输出格式说明:3为非零数据的个数,3 4 2 是以空格隔开的3个非零整数) 3 3 4 2 样例输入: 7 0 0 7 0 0 9 0 样例输出: 2 7 9 样例输入: 3 0 0 0 样例输出: 0 # include <bits/stdc++.h> using namespace std ; int CompactIntegers ( int nu [ ] , int m ) { for ( int i = m - 1 ; i >= 0 ; i -- ) if ( nu [ i ] == 0 ) { for ( int j = i ; j < m - 1 ; j ++ ) nu [ j ] = nu [ j + 1 ] ; m -- ; } return m ; } int main ( ) { int n ; cin >> n ; int num [ n ] ;

蓝桥杯 算法训练 关联矩阵

▼魔方 西西 提交于 2019-12-14 00:37:15
如果可以,可以陪你千年不老,千年只想眷顾你倾城一笑;如果愿意,愿意陪你永世不离,永世只愿留恋你青丝白衣。 #include <iostream> #include <cstdio> #include <algorithm> #include <string> #include <cstring> #include <cstdlib> #include <cmath> #include <stack> #include <queue> #include <set> #include <map> #include <vector> #include <ctime> #include <cctype> #include <bitset> #include <utility> #include <sstream> #include <complex> #include <iomanip> #define inf 0x3f3f3f3f typedef long long ll; using namespace std; int n,m,mp[1010][1010],u,v; int main() { cin>>n>>m; for(int i=0; i<m; i++) { cin>>u>>v; u--; v--; mp[u][i]=1; mp[v][i]=-1; } for(int i=0;