蓝桥杯

蓝桥杯 公约数公倍数

前提是你 提交于 2020-01-23 14:10:52
最小公倍数 #include<stdio.h> int main(){ int i,a,b; scanf("%d%d",&a,&b); for (i=a;;i++){ if(i%a==0&&i%b==0) { printf("%d",i);break; } } return 0; } 最小公约数与交换 #include<stdio.h> void Swap(int *a,int *b) { *a^=*b; *b^=*a; *a^=*b; } GYS(int a,int b) { int c; while(a%b!=0) { c=a%b; a=b; b=c;} return b; } int main() { int a,b; puts("Please input a and b:"); scanf("%d%d",&a,&b); Swap(&a,&b); printf("%d and %d \n最大公约数为:%d\n",a,b,GYS(a,b)); return 0; } 呐呐呐呐。。。看到一个不错的求公约数的优雅代码: int gcd (int m,int n) { if (n==0) return m; return gcd (n,m%n); }  来源: https://www.cnblogs.com/zhangzimu/p/6104237.html

蓝桥杯 反置数 数论

此生再无相见时 提交于 2020-01-23 14:10:22
题目描述 一个整数的“反置数”指的是把该整数的每一位 数字的顺序颠倒过来所得到的另一个整数。如果一个整数的末尾是以0结尾,那么在它的反置数当中,这些0就被省略掉了。比如说,1245的反置数是 5421,而1200的反置数是21。请编写一个程序,输入两个整数,然后计算这两个整数的反置数之和sum,然后再把sum的反置数打印出来。要求:由 于在本题中需要多次去计算一个整数的反置数,因此必须把这部分代码抽象为一个函数的形式。 输入 输入只有一行,包括两个整数,中间用空格隔开。 输出 输出只有一行,即相应的结果。 样例输入 435 754 样例输出 199 知识点:主要是明白了字符串和int的转换,stringstream在头文件sstream,它可以投入任何东西,产出任何东西. #include<iostream> #include<sstream> #include<algorithm> using namespace std; int get(string s) { reverse(s.begin(),s.end()); //012 12是一样的 stringstream ss; ss<<s; int a; ss>>a; return a; } int main() { string s1,s2; cin>>s1>>s2; int sum1=get(s1); int sum2=get

【蓝桥杯训练】第四天1291、1293

拜拜、爱过 提交于 2020-01-22 18:58:57
1291 [蓝桥杯2016初赛]凑算式 这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。 比如: 6+8/3+952/714 就是一种解法,5+3/1+972/486 是另一种解法。 这个算式一共有多少种解法? 输出 输出一个整数表示答案 注意 使用permutations产生全排列 算法 暴力破解 先产生全排列,再依次检验是否满足要求 技巧: 可以在总多结果集中,随机选几种输出,验证答案是否可靠,比较实用 题解 from itertools import permutations res = 0 for i in permutations([1,2,3,4,5,6,7,8,9]): tmp = i[1]/i[2] + (100*i[3]+10*i[4]+i[5])/(100*i[6]+10*i[7]+i[8]) if tmp == int(tmp): if i[0] + tmp == 10: res = res+1 else: continue print(res) 1293 [蓝桥杯2016初赛]报纸页数 X星球日报和我们地球的城市早报是一样的,都是一些单独的纸张叠在一起而已。每张纸印有4版。 比如,某张报纸包含的4页是:5,6,11,12,可以确定它应该是最上边的第2张报纸。 我们在太空中捡到了一张X星球的报纸,4个页码分别是:1125,1126,1727

蓝桥杯 ALGO-103 算法训练 完数

强颜欢笑 提交于 2020-01-22 08:57:38
算法训练 完数 时间限制:1.0s 内存限制:512.0MB 问题描述 一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1、2、3,而6=1+2+3,因此6就是“完数”。又如,28的因子为1、2、4、7、14,而28=1+2+4+7+14,因此28也是“完数”。编写一个程序,判断用户输入的一个数是否为“完数”。 输入格式:输入只有一行,即一个整数。 输出格式:输出只有一行,如果该数为完数,输出yes,否则输出no。 输入输出样例 样例输入 6 样例输出 yes #include <stdio.h> int factor_sum(int n) { int sum = 0; for (int i = 1; i * i <= n; ++i) { if (n % i == 0) { if (n / i == i) sum += i; else sum += i + n / i; } } sum -= n; return sum; } int main() { int n; scanf("%d", &n); if (n == factor_sum(n)) printf("yes"); else printf("no"); return 0; } 来源: CSDN 作者: liulizhi1996 链接: https://blog.csdn.net

蓝桥杯 BEGIN-4 入门训练 Fibonacci数列

我的梦境 提交于 2020-01-22 05:50:23
入门训练 Fibonacci数列 时间限制:1.0s 内存限制:256.0MB 问题描述 Fibonacci数列的递推公式为: ,其中 。 当n比较大时, 也非常大,现在我们想知道, 除以10007的余数是多少。 输入格式 输入包含一个整数n。 输出格式 输出一行,包含一个整数,表示 除以10007的余数。 说明:在本题中,答案是要求 除以10007的余数,因此我们只要能算出这个余数即可,而不需要先计算出 的准确值,再将计算的结果除以10007取余数,直接计算余数往往比先算出原数再取余简单。 样例输入 10 样例输出 55 样例输入 22 样例输出 7704 数据规模与约定 1 <= n <= 1,000,000。 #include <stdio.h> int main() { int n; scanf("%d", &n); if (n == 1 || n == 2) printf("1"); else { int fn = 2, fn_1 = 1, fn_2 = 1; for (int i = 3; i <= n; ++i) { fn = (fn_1 + fn_2) % 10007; fn_2 = fn_1; fn_1 = fn; } printf("%d", fn); } return 0; } 来源: CSDN 作者: liulizhi1996 链接: https:/

#蓝桥杯练习#字符删除

那年仲夏 提交于 2020-01-22 05:20:01
[蓝桥杯][算法训练VIP]字符删除 # include <bits/stdc++.h> using namespace std ; int main ( ) { freopen ( "in.txt" , "r" , stdin ) ; char str [ 25 ] , s [ 25 ] , ch ; gets ( str ) ; //scanf("%s", str); //getchar();这个不对,用gets scanf ( "%c" , & ch ) ; int i , j , len ; len = strlen ( str ) ; j = 0 ; for ( i = 0 ; i < len ; i ++ ) { if ( str [ i ] != ch ) { s [ j ++ ] = str [ i ] ; } } s [ j ] = '\0' ; printf ( "%s" , s ) ; //for(i = 0; i < j; i++) //{ // printf("%c", s[i]); //}这样写也可以,但是比较麻烦 } 来源: CSDN 作者: vircorns 链接: https://blog.csdn.net/weixin_43476037/article/details/104058848

计蒜客 2020 蓝桥杯大学 B 组省赛模拟赛(一)

↘锁芯ラ 提交于 2020-01-22 03:00:55
题目集传送门 打铁弱鸡,若各位大佬发现错误麻烦评论指正。 A. 结果填空:有趣的数字 蓝桥杯标准的送温暖题,枚举每个数判断是否含有数字5并进行判素数后计数即可。 const int MAXN = 100000 ; bool check ( int n ) { while ( n ) { if ( n % 10 == 5 ) return true ; n / = 10 ; } return false ; } bool prime ( int n ) { if ( n < 2 ) return false ; bool ret = true ; for ( int i = 2 ; i * i <= n ; i ++ ) { if ( n % i == 0 ) ret = false ; } return ret ; } int main ( ) { int cnt = 0 ; for ( int i = 1 ; i <= MAXN ; i ++ ) if ( check ( i ) && prime ( i ) ) cnt ++ ; cout << cnt << endl ; return 0 ; } B. 结果填空:爬楼梯 超级经典的dp,蓝桥杯日常经典题变形。 萌新可以先做这道题 传送门 通过暴力枚举我们可以发现当步数为1和2时,方案数为1 1 2 3 5 8 11

第八届蓝桥杯省赛A组

六眼飞鱼酱① 提交于 2020-01-21 14:09:45
标题:字母组串 由 A,B,C 这3个字母就可以组成许多串。 比如:“A”,“AB”,“ABC”,“ABA”,“AACBB” … 现在,小明正在思考一个问题: 如果每个字母的个数有限定,能组成多少个已知长度的串呢? 他请好朋友来帮忙,很快得到了代码, 解决方案超级简单,然而最重要的部分却语焉不详。 请仔细分析源码,填写划线部分缺少的内容。 对于上面的测试数据,小明口算的结果应该是: 6 19 /*6: AB AC BC BA CA CB 顺序不同也是一种。 19: 1.都用一个 ABC ACB BCA BAC CAB CBA 2用两个B ABB BAB BBA BBC BCB CBB 用两个C ACC CAC CCA BCC CBC CCB 3.用3个C CCC 思路:长度为n的串,确定一个字母以后变为n-1长度。 思路:显然是递归的那一步,串长度为n的种数=长度为n-1的串,用了A以后的种数+长度为n-1的串用了B的种数+长度为n-1的串,用了C的种数。 f(1,1,1,2)=f(0,1,1,1)+f(1,0,1,1)+f(1,1,0,1) =f(-1,1,1,0)+f(0,0,1,0)+f(0,1,0,0)+f(0,0,1,0)+f(0,-1,1,0)+f(1,0,0,0)+f(0,1,0,0)+f(1,0,0,0)+f(1,1,-1,0) */ #include <stdio

#蓝桥杯练习#用筛法求之N内的素数

瘦欲@ 提交于 2020-01-21 05:26:06
# include <iostream> # include <cstdio> # include <cstring> # include <string> # include <algorithm> # include <cmath> using namespace std ; typedef long long ll ; int a [ 10005 ] ; char b [ 10005 ] ; int main ( ) { int n ; while ( cin >> n ) { int flag = 1 ; for ( int i = 2 ; i <= n ; i ++ ) { flag = 1 ; for ( int j = 2 ; j < i ; j ++ ) { if ( i % j == 0 ) flag = 0 ; } if ( flag ) cout << i << endl ; } } return 0 ; } 来源: CSDN 作者: vircorns 链接: https://blog.csdn.net/weixin_43476037/article/details/104009595

蓝桥杯-回文取数

拟墨画扇 提交于 2020-01-21 02:08:54
蓝桥杯-回文取数 思想 先从最左端开始向下,但是不能让它从i=0,j=0开始,因为可能还会再用一次这个循环,就是有两次向下的情况发生 问题描述   回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度。一开始位于矩阵左上角,方向向下。 输入格式   输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列。接下来m行每行n个整数,表示这个矩阵。 输出格式   输出只有一行,共mn个数,为输入矩阵回形取数得到的结果。数之间用一个空格分隔,行末不要有多余的空格。 样例输入 3 3 1 2 3 4 5 6 7 8 9 样例输出 1 4 7 8 9 6 3 2 5 样例输入 3 2 1 2 3 4 5 6 样例输出 1 3 5 6 4 2 # include <stdio.h> # define MAX 200 int main ( ) { int i , j , n , m , count , a [ MAX ] [ MAX ] ; scanf ( "%d %d" , & n , & m ) ; for ( i = 0 ; i < n ; i ++ ) for ( j = 0 ; j < m ; j ++ ) scanf ( "%d" , & a [ i ] [ j ] ) ; count = n * m ; i = - 1 ; j = 0 ; while (