栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

蓝桥杯算法入门

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

蓝桥杯算法入门

文章目录

2014

武功秘籍 (小学题...)猜字母 (约瑟夫环)大衍数列 (小学题...)打印图形 (代码填空题)神奇算式 (模拟 - 字符串转换 - 分解)绳圈 (难 - dp) 但可以猜分糖果 (模拟)地宫寻宝 (dfs)小朋友排身高 (树状数组 - 区间和数组 - 模板) 2014年总结

2014 武功秘籍 (小学题…)

2000多页的武功秘籍 (注意有1000页 , 常识!!!:然后1001-1002页与1 - 2 是连在一起的)
书的10与11在同一张纸张上,第11和12页不在同一张纸张上
要想取走书的81到92页的武功,至少要撕下多少张纸带走
答案为7
*/
#define N 70 void f(char a[][N], int rank, int row, int col) { if(rank==1){ a[row][col] = '*'; return; } int w = 1; int i; for(i=0; i 神奇算式 (模拟 - 字符串转换 - 分解)

由4个不同数字组成一个乘法算式,它们的乘积仍然由这4个数字组成
如:
210 * 6 = 1260
8 * 473 = 3784
27 * 81 = 2187
如果满足乘法交换律算作同一种情况,那么包含共有多少种 (坑点)
填写该数字



int ans = 0;
#include
#include
#include
bool check(int src,int r) { //bug == 18  ,答案 12种
	//先转字符串 排序 比较
	string src_str , r_str;
	stringstream ss;
	ss << src; //整型
	ss >> src_str; //转字符串
	stringstream ss1;
	ss1 << r;  // 注意先 << 整型  !!
	ss1 >> r_str;  // 再 >> 字符串  !!
	sort(r_str.begin(),r_str.end());
	sort(src_str.begin(),src_str.end());
	if(r_str == src_str){
		return true;
	}
	return false;
}
int test_04() { //一个小技巧  j = 2,k = 3 先打断点 j = 2时取消断点,再断k处
	for(int i = 1; i < 10; i++) { //第一位不能为0!!!
		for(int j = 0; j < 10; j++) {
			if(i != j) {
				for(int k = 0; k < 10; k++) {
					if(k != i && k != j) {
						for(int l = 0; l < 10; l++) {
							if(l != k && l != i && l != j) { // *可以插入在三个位置
								int src = i*1000 + j*100 + 10 * k + l;
								//验证 右式
								if(j != 0) { //注意拆数字,乘法除法运算,每个数字最高位不能为0 !!!
									int r1  = i * (j *100 + k * 10 + l);
									if(check(src,r1)) {
										ans++;
									}
								}
								if(k != 0) {
									int r2 = (i*10+j) * (k * 10 + l);
									if((i*10+j) < (k * 10 + l) &&check(src,r2)) {
										ans++;
									}
								}
								//之前肯定已经出现过了 1位 * 3位 == 3位 * 1位
								if(l != 0) {
									int r3 = (i * 100 + j * 10 + k) * l;
									if(check(src,r3)) {
										ans++;
									}
								}
								//这段可略
							}
						}
					}
				}
			}
		}
	}
	cout << ans << endl;
	return 0;
}






// ~引用
#include
int main()
{
    int a[101],n,i,count=0,flag=0;//定义数组,用来储存小朋友的糖数,count定义为老师需要补发的糖数,初始为0,flag为判断是否所有小朋友糖数都相等的标志。
    scanf("%d",&n);//输入N,小朋友的个数。
    a[0]=0;//把a[0]定义为一个类似于缓冲区的东西,用于暂时的存放数据。
    for(i=1;i<=n;i++)
    scanf("%d",&a[i]);//为方便起见,把a[i]直接就看成第i个小朋友 。
    while(!flag)//flag初始为0,即现在每人糖数不相等,需要进行以下操作进行重新分配。(即使现在糖数相同时 以下的操作也不影响目前的每个人的糖数,因为在每人都相等的情况下,无论进行多少次分配都不会改变数据。)
    {
        a[0]=a[1]/2;//缓冲区存放第一个小朋友的
        for(i=1;i 
地宫寻宝 (dfs) 

【题目描述】
X 国王有一个地宫宝库。是 n x m 个格子的矩阵。每个格子放一件宝贝。每个宝贝贴着价值标签。
地宫的入口在左上角,出口在右下角。
小明被带到地宫的入口,国王要求他只能向右或向下行走。
走过某个格子时,如果那个格子中的宝贝价值比小明手中任意宝贝价值都大,小明就可以拿起它(当然,也可以不拿)。
当小明走到出口时,如果他手中的宝贝恰好是k件,则这些宝贝就可以送给小明。
请你帮小明算一算,在给定的局面下,他有多少种不同的行动方案能获得这k件宝贝。
输入
输入一行3个整数,用空格分开:n m k (1< =n,m< =50, 1< =k< =12)
接下来有 n 行数据,每行有 m 个整数 Ci (0< =Ci< =12)代表这个格子上的宝物的价值
输出
要求输出一个整数,表示正好取k个宝贝的行动方案数。该数字可能很大,输出它对 1000000007 取模的结果。

输入:
2 2 2
1 2
2 1
输出:
2
输入2:
2 3 2
1 2 3
2 1 5
输出2:
14





/ //合并为一步
		cnt[i] += getSum(c,h[i]); //求出小于h[i]+1的数据的个数
	}
	for(int i = 0; i < n; i++) {
		ans += cnt[i]*((cnt[i]-1) / 2);  //先除2减小数值
	}
	printf("%llin",ans);
	return 0;
}


2014年总结

01 武功秘籍 不用运算 ,考验思维(小学题)
02 等额本金 (小学题)
03 猜字母 数组的操作 (挪动数列) – (约瑟夫环)
04 大衍数列 奇偶数
05 打印图形 递归 上下文推测 - 参数的含义(图形规律)
06 神奇算式 枚举 -(字符串排序 比较)
07 神圈 数学归纳 dp推导 (难***)
08 分糖果 模拟
09 地宫取宝 深搜dfs (模板**) 子问题重复求解
10 小朋友排队 (最难****) 树状数组妙用

int main() {

	test_08();

	return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/783802.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号