蓝桥杯

蓝桥杯:递归求二进制表示位数

若如初见. 提交于 2020-02-03 17:41:31
问题描述 给定一个十进制整数,返回其对应的二进制数的位数。例如,输入十进制数9,其对应的二进制数是1001,因此位数是4。 样例输入输出 输入 9 输出 4 思路 题目不难,你可以直接对n求对数log 2 n 然后得到结果 ↓ # include <iostream> # include <cmath> using namespace std ; # define log2(x) ((int)(log(x)/log(2))) int main ( ) { int n ; cin >> n ; cout << log2 ( n ) + 1 << endl ; return 0 ; } 但是重点是用 递归的思维 去解决 二进制对应的是一颗二叉树,它的深度就是二进制数的位数 深度为1的层能够表示的数是0,1,这就意味着0,1的二进制长度就是1 同理深度为2的层,能够表示2,3 深度为3:4,5,6,7 深度为4:8,9,10,11,12,13,14,15 对于数字x,想要求它的二进制长度,就是求它在二进制树中能有多深 对于x,x/2必定在树的上一层 这就意味着【数字x的二进制数的长度】是【x/2的二进制数长度】+1 于是可以定义递推式: len ( x ) = len ( x / 2 ) + 1 边界条件:x=0 或 x=1,此时长度为1 完整的递归函数: int binary_len

C++题解之 蓝桥杯 算法提高 成绩排序2

删除回忆录丶 提交于 2020-02-03 05:18:26
题目: 题目链接 这题与成绩排序那题差不多,都可以用 class 实现,只要把成绩排序那题的代码改改就ok啦 成绩排序题解,点击跳转 // 出处:https://blog.csdn.net/sjc_0910/article/details/104145262 # include <iostream> # include <algorithm> # include <functional> using namespace std ; // class class Student { private : int math , english , chinese ; public : int id ; friend istream & operator >> ( istream & , Student & ) ; friend ostream & operator << ( ostream & , Student & ) ; bool operator > ( const Student & ) const ; Student ( int c = 0 , int m = 0 , int e = 0 , int i = 0 ) : math ( m ) , chinese ( c ) , english ( e ) , id ( i ) { } virtual ~ Student ( )

C++题解之 蓝桥杯 算法提高 成绩排序

☆樱花仙子☆ 提交于 2020-02-03 03:18:45
题目: 题目链接 这题官方给了点小提示:结构体 当然, 对类(class)非常擅长的 我怎么可能直接写 struct 呢? 上来先敲个 class,运算符重载 operator,重载 > ,用来调用 sort(),把构造和析构写好,顺便再重载个IO sort(): 头文件 algorithm 中的函数,用来快速排序, 详细教程点击跳转(这里借一下别人的教程) C++ 代码如下: // 出处:https://blog.csdn.net/sjc_0910/article/details/104144750 # include <iostream> # include <algorithm> # include <functional> using namespace std ; // class class Student { private : int math , english , chinese ; public : int id ; friend istream & operator >> ( istream & , Student & ) ; friend ostream & operator << ( ostream & , Student & ) ; bool operator > ( const Student & ) const ; Student ( int c

蓝桥杯-Huffuman树(C语言)

廉价感情. 提交于 2020-02-03 03:08:47
蓝桥杯-Huffuman树 思想 和求哈夫曼树一样,先进行排序,我是进行的升序排序,从第一位和第二位开始依次相加,每次再进行排序,用一个常数变量叠加记录。 问题描述   Huffman树在编码中有着广泛的应用。在这里,我们只关心Huffman树的构造过程。 给出一列数{pi}={p0, p1, …, pn-1},用这列数构造Huffman树的过程如下: 1. 找到{pi}中最小的两个数,设为pa和pb,将pa和pb从{pi}中删除掉,然后将它们的和加入到{pi}中。这个过程的费用记为pa + pb。   2. 重复步骤1,直到{pi}中只剩下一个数。   在上面的操作过程中,把所有的费用相加,就得到了构造Huffman树的总费用。   本题任务:对于给定的一个数列,现在请你求出用该数列构造Huffman树的总费用。   例如,对于数列{pi}={5, 3, 8, 2, 9},Huffman树的构造过程如下:   1. 找到{5, 3, 8, 2, 9}中最小的两个数,分别是2和3,从{pi}中删除它们并将和5加入,得到{5, 8, 9, 5},费用为5。   2. 找到{5, 8, 9, 5}中最小的两个数,分别是5和5,从{pi}中删除它们并将和10加入,得到{8, 9, 10},费用为10。   3. 找到{8, 9, 10}中最小的两个数,分别是8和9,从{pi

蓝桥杯剪格子dfs

拈花ヽ惹草 提交于 2020-02-02 20:26:24
#include<iostream> #include<cstring> #include<iomanip> #include<cmath> #include<algorithm> #include<bits/stdc++.h> using namespace std; int N, M; int num = INT_MAX, sum = 0; int A[10][10]; bool visit[10][10]; bool outOfBorder(int i, int j) { if (i < 0 || i >= N || j < 0 || j >= M) return true; return false; } void DFS(int i, int j, int currentSum, int currentNum) { visit[i][j] = true; currentSum += A[i][j]; ++currentNum; if (2 * currentSum >= sum) { if (2 * currentSum == sum)// 如果当前遍历过的数字之和等于所有数字之和的一半 num = min(currentNum, num);// 更新包含左上角格子的那个区域包含的格子的最小数目 visit[i][j] = false; return;// 回溯到上一结点

第七届蓝桥杯省赛C++B组 交换瓶子

久未见 提交于 2020-02-02 19:43:10
有 N 个瓶子,编号 1∼N,放在架子上。 比如有 5 个瓶子: 2 1 3 5 4 要求每次拿起 2 个瓶子,交换它们的位置。 经过若干次后,使得瓶子的序号为: 1 2 3 4 5 对于这么简单的情况,显然,至少需要交换 2 次就可以复位。 如果瓶子更多呢?你可以通过编程来解决。 输入格式: 第一行包含一个整数 N,表示瓶子数量。 第二行包含 N 个整数,表示瓶子目前的排列状况。 输出格式: 输出一个正整数,表示至少交换多少次,才能完成排序。 数据范围: 1 ≤ N ≤ 10000, 输入样例1: 5 3 1 2 5 4 输出样例1: 3 输入样例2: 5 5 4 3 2 1 输出样例2: 2 置换图: 每次交换同一图中的两个元素会使得图一分为二,交换不同图中的两个元素会使得两图合二为一,如果想每个元素为一个图的话,就交换 n - 图数 #include<iostream> using namespace std; const int N = 10010; int b[N],st[N]; int main(){ int cnt = 0,n; cin>>n; for (int i = 1; i <= n; ++i) cin>>b[i]; for (int i = 1; i <= n; ++i){ if (!st[i]){ st[i] = 1; for (int j = b[i];

蓝桥杯历届试题-打印十字图

感情迁移 提交于 2020-02-02 05:53:05
转载大佬的思路 原文链接 此文为CSDN博主「KKhack4fun」的原创文章,附上此声明。 问题描述 小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示: . . $$$$$$$$$$$$$ . . . . $ . . . . . . . . . . . $ . . $$$ . $$$$$$$$$ . $$$ $ . . . $ . . . . . . . $ . . . $ $ . $$$ . $$$$$ . $$$ . $ $ . $ . . . $ . . . $ . . . $ . $ $ . $ . $$$ . $ . $$$ . $ . $ $ . $ . $ . . . $ . . . $ . $ . $ $ . $ . $ . $$$$$ . $ . $ . $ $ . $ . $ . . . $ . . . $ . $ . $ $ . $ . $$$ . $ . $$$ . $ . $ $ . $ . . . $ . . . $ . . . $ . $ $ . $$$ . $$$$$ . $$$ . $ $ . . . $ . . . . . . . $ . . . $ $$$ . $$$$$$$$$ . $$$ . . $ . . . . . . . . . . . $ . . . . $$$$$$$$$$$$$ . .

蓝桥杯 入门训练 A+B问题

限于喜欢 提交于 2020-02-02 02:47:12
问题描述 输入A、B,输出A+B。 说明:在“问题描述”这部分,会给出试题的意思,以及所要求的目标。 输入格式 输入的第一行包括两个整数,由空格分隔,分别表示A、B。 说明:“输入格式”是描述在测试你的程序时,所给的输入一定满足的格式。 做题时你应该假设所给的输入是一定满足输入格式的要求的,所以你不需要对输入的格式进行检查。多余的格式检查可能会适得其反,使用你的程序错误。 在测试的时候,系统会自动将输入数据输入到你的程序中,你不能给任何提示。比如,你在输入的时候提示“请输入A、B”之类的话是不需要的,这些多余的输出会使得你的程序被判定为错误。 输出格式 输出一行,包括一个整数,表示A+B的值。 说明:“输出格式”是要求你的程序在输出结果的时候必须满足的格式。 在输出时,你的程序必须满足这个格式的要求,不能少任何内容,也不能多任何内容。如果你的内容和输出格式要求的不一样,你的程序会被判断为错误,包括你输出了提示信息、中间调试信息、计时或者统计的信息等。 样例输入 12 45 说明:“样例输入”给出了一组满足“输入格式”要求的输入的例子。 这里给出的输入只是可能用来测试你的程序的一个输入,在测试的时候,还会有更多的输入用来测试你的程序。 样例输出 57 说明:“样例输出”给出了一组满足“输出格式”要求的输出的例子。 样例输出中的结果是和样例输入中的是对应的,因此

“蓝桥杯”练习系统 - 基础练习 - 杨辉三角形

橙三吉。 提交于 2020-02-01 18:01:53
思路: 让二维数组初始化为0, pas[0][0] = 1, 然后就能模拟了. pas[i][j] = pas[i - 1][j - 1] + pas[i - 1][j]; 1 #include <iostream> 2 using namespace std; 3 4 int pas[50][50]{0}; 5 6 int main() 7 { 8 ios::sync_with_stdio(false); 9 cin.tie(0); 10 11 int n; 12 cin >> n; 13 pas[0][0] = 1; 14 for (int i = 1; i <= n; i++) { 15 for (int j = 1; j <= i; j++) { 16 pas[i][j] = pas[i - 1][j - 1] + pas[i - 1][j]; 17 if (j == i) 18 cout << pas[i][j] << endl; 19 else 20 cout << pas[i][j] << ' '; 21 } 22 } 23 24 return 0; 25 } 来源: https://www.cnblogs.com/AntonLiu/p/12249031.html

“蓝桥杯”练习系统 - 基础练习 - 回文数

做~自己de王妃 提交于 2020-02-01 17:16:50
思路: 取每一位, 第一位和第四位相同, 第二位和第三位相同即回文数. 1 #include <iostream> 2 using namespace std; 3 4 int main() 5 { 6 ios::sync_with_stdio(false); 7 cin.tie(0); 8 9 for (int i = 1001; i <= 9999; i++) { 10 int a = i % 10; 11 int b = i / 10 % 10; 12 int c = i / 100 % 10; 13 int d = i / 1000; 14 if (a == d && b == c) 15 cout << i << endl; 16 } 17 18 return 0; 19 } 来源: https://www.cnblogs.com/AntonLiu/p/12249070.html