蓝桥杯算法训练合集三 1.车的位置2.24点3.最大分解4.RP大冒险5.士兵杀敌(二)
目录
1.车的位置(搜索)
2.24点(搜索)
3.最大分解(贪心)
4.RP大冒险
5.士兵杀敌(二)
1.车的位置(搜索)
问题描述
在一个n*n的棋盘中,每个格子中至多放置一个车,且要保证任何两个车都不能相互攻击,有多少中放法(车与车之间是没有差别的)
输入格式
包含一个正整数n
输出格式
一个整数,表示放置车的方法数
样例输入
2
样例输出
7
数据规模和约定
n<=8
【样例解释】一个车都不放为1种,放置一个车有4种,放置2个车有2种。
示例代码
#include<iostream>
#include<algorithm>
using namespace std;
int n, sum = 0, f[9] = { 0 };
int ans = 0;
void dfs(int sum) {if (sum == n) {//如果所有行都已经遍历完ans++;}else {for (int i = 0; i <= n; i++) {if (i == 0) {//如果sum+1行不放置车sum++;dfs(sum);sum--;}else {//如果当前行放置车if (f[i] == 0) {//如果当前列没有放置过车f[i] = 1;sum++;dfs(sum);sum--;f[i] = 0;}}}}
}
int main() {cin >> n;dfs(sum);cout << ans;return 0;
}
2.24点(搜索)
问题描述
24点游戏是一个非常有意思的游戏,很流行,玩法很简单:给你4张牌,每张牌上有数字(其中A代表1,J代表11,Q代表12,K代表13),你可以利用数学中的加、减、乘、除以及括号想办法得到24,例如:
((A*K)-J)*Q等价于((1*13)-11)*12=24
加减乘不用多说了,但除法必须满足能整除才能除!这样有一些是得不到24点的,所以这里只要求求出不超过24的最大值。
输入格式
输入第一行N(1<=N<=5)表示有N组测试数据。每组测试数据输入4行,每行一个整数(1到13)表示牌值。
输出格式
每组测试数据输出一个整数,表示所能得到的最大的不超过24的值。
样例输入
3
3
3
3
3
1
1
1
1
12
5
13
1
样例输出
24
4
21
示例代码
#include<iostream>
#include<algorithm>
using namespace std;
int n, a[5][5], ans = 0, b[4], temp1, temp2, temp3;
int sum = 0;
int xuanze(int i, int c, int d) {//判断是哪种运算符int hhh = 1;switch (i) {case 0:hhh = c + d; break;//加法case 1:hhh = c - d; break;//减法case 2:hhh = c * d; break;//乘法case 3:hhh = c % d; break;//求余}return hhh;
}
void dfs(int index, int sum) {//针对先a后b再c最后d的运算顺序if (sum == 3) {//如果运算符已经分配完毕if (b[sum] <= 24) {//如果结果小于24则符合题目ans = max(ans, b[sum]);}}else {for (int i = 0; i <= 3; i++) {//选一种运算符运算b[sum + 1] = xuanze(i, b[sum], a[index][sum + 1]);if (b[sum + 1] != 0 && i == 3) {//如果选择的是除法而且不能够整除,即运算不规范return;//返回上一步,还有一个原因是因为这个for循环已经结束了}else {if (i == 3) {b[sum + 1] = b[sum] / a[index][sum + 1];//可以整除,求商}sum++;dfs(index, sum);sum--;}}}
}
void twoo(int index) {//针对两堆数据,(a+b)*(c+d)这种for (int i = 0; i <= 3; i++) {//a和b之间的运算符选择if (i == 3) {if (a[index][1] == 0) {//a和b之间能否除法break;}}temp1 = xuanze(i, a[index][0], a[index][1]);if (i == 3) {if (temp1 == 0) {//如果能整除temp1 = a[index][0] / a[index][1];}else {//如果不能整除break;}}for (int j = 0; j <= 3; j++) {//c和d之间的运算符选择if (j == 3) {if (a[index][3] == 0) {//c和d之间能否除法break;}}temp2 = xuanze(j, a[index][2], a[index][3]);if (j == 3) {if (temp2 == 0) {//如果可以整除temp2 = a[index][2] / a[index][3];}else {//如果不能整除break;}}for (int k = 0; k <= 3; k++) {//(ab)与(cd)之间的运算符选择if (k == 3 && temp2 == 0) {//如果不能使用除法break;}temp3 = xuanze(k, temp1, temp2);if (k == 3) {if (temp3 == 0) {//可以整除temp3 = temp1 / temp2;}else {//不可以整除break;}}if (temp3 <= 24) {//符合条件的找最大值ans = max(temp3, ans);}}}}
}
int main() {cin >> n;for (int i = 0; i < n; i++) {for (int j = 0; j < 4; j++) {cin >> a[i][j];}sort(a[i], a[i] + 4);//从小到大排序,为next_permutation函数铺垫}for (int i = 0; i < n; i++) {ans = 0;do {sum = 0;b[0] = a[i][0];dfs(i, sum);sum = 0;twoo(i);} while (next_permutation(a[i], a[i] + 4) != 0);//只要数组a中的元素还能排序就继续运行cout << ans << endl;}return 0;
}
3.最大分解(贪心)
问题描述
给出一个正整数n,求一个和最大的序列a0,a1,a2,……,ap,满足n=a0>a1>a2>……>ap且ai+1是ai的约数,输出a1+a2+……+ap的最大值
输入格式
输入仅一行,包含一个正整数n
输出格式
一个正整数,表示最大的序列和,即a1+a2+……+ap的最大值
样例输入
10
样例输出
6
数据规模和约定
1<n<=10^6
样例说明
p=2
a0=10,a1=5,a2=1,6=5+1
示例代码
#include<iostream>
#include<algorithm>
using namespace std;
int ans = 0, n, temp;
int qiuyue(int a) {//找到除了本身的最大约数for (int i = a / 2; i >= 1; i--) {if (a % i == 0) {return i;}}
}
int main() {cin >> n;if (n == 1) {//如果输入的是1,只能为1cout << 1;return 0;}temp = n;do {temp = qiuyue(temp);//最大约数进入下一次循环ans += temp;} while (temp != 1);//temp=1代表循环结束,没法继续分解cout << ans;
}
4.RP大冒险
问题描述
请尽情使用各种各样的函数来测试你的RP吧~~~
输入格式
一个数N表示测点编号。
输出格式
一个0~9的数。
样例输入
0
样例输出
X
{当且仅当输出仅有一个数X且X为0~9的数时你的得分不为零,此时你的得分为系统根据你的输出而计算出的你本次的RP。}
数据规模和约定
测点编号为1~10,且stdans随机。
究竟使用怎样的函数才能获得较高的RP呢?指数函数?幂函数?斐波那契数?圆周曲线的导数函数?好想尝试一下哦~
示例代码
#include<iostream>
#include<algorithm>
using namespace std;
int n;int main() {cin >> n;n = n % 9;n = 9 - n;cout << n;
}
只要保证输出在0-9,想怎么写怎么写
5.士兵杀敌(二)
问题描述
南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的。
小工是南将军手下的军师,南将军经常想知道第m号到第n号士兵的总杀敌数,请你帮助小工来回答南将军吧。
南将军的某次询问之后士兵i可能又杀敌q人,之后南将军再询问的时候,需要考虑到新增的杀敌数。
输入格式
多组测试数据,以EOF结尾;
每组第一行是两个整数N,M,其中N表示士兵的个数(1<N<1000000),M表示指令的条数。(1<M<100000)
随后的一行是N个整数,ai表示第i号士兵杀敌数目。(0<=ai<=100)
随后的M行每行是一条指令,这条指令包含了一个字符串和两个整数,首先是一个字符串,如果是字符串QUERY则表示南将军进行了查询操
作,后面的两个整数m,n,表示查询的起始与终止士兵编号;如果是字符串ADD则后面跟的两个整数I,A(1<=I<=N,1<=A<=100),表示第I个士兵新增杀敌数为A.
输出格式
对于每次查询,输出一个整数R表示第m号士兵到第n号士兵的总杀敌数,每组输出占一行
样例输入
5 6
1 2 3 4 5
QUERY 1 3
ADD 1 2
QUERY 1 3
ADD 2 3
QUERY 1 2
QUERY 1 5
样例输出
6
8
8
20
示例代码
#include<iostream>
#include<algorithm>
using namespace std;
int M, N, a[1000000], aa[1000000];
struct Zhiling {int m;int n;string q;
};
struct Zhiling b[100000];
int main() {while (scanf("%d%d", &N, &M) != EOF) {//只要不是EOFaa[0] = 0;for (int i = 1; i <= N; i++) {cin >> a[i];aa[i] = aa[i - 1] + a[i];//前缀和}for (int i = 1; i <= M; i++) {cin >> b[i].q >> b[i].m >> b[i].n;}for (int i = 1; i <= M; i++) {if (b[i].q[0] == 'Q') {//如果是查询杀敌数cout << aa[b[i].n] - aa[b[i].m - 1] << endl;}else {//如果是修改杀敌数for (int j = b[i].m; j <= N; j++) {aa[j] += b[i].n;}}}}return 0;
}
蓝桥杯算法训练合集三 1.车的位置2.24点3.最大分解4.RP大冒险5.士兵杀敌(二)相关推荐
- 蓝桥杯算法训练合集十三 1.P06022.P07033.逗志芃的危机4.唯一的小可爱5.JOE的矩阵
目录 1.P0602 2.P0703 3.逗志芃的危机 4.唯一的傻子 5.JOE的矩阵 1.P0602 问题描述 编写一个程序,输入一个4位的自然数,将组成该数的各位数字重新排列,形成一个最大数和一 ...
- 蓝桥杯算法训练合集八 1.数的划分2.求先序排列3.平方计算4.三角形高5.单词复数
目录 1.数的划分 2.求先序排列 3.平方计算 4.三角形高 5.单词复数 1.数的划分 问题描述 将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序). 例如:n=7,k=3,下面三种 ...
- 蓝桥杯算法训练合集一 1.印章2.拿金币3.数字游戏4.无聊的逗5.礼物
目录 1.印章(动态规划) 2.拿金币(动态规划) 3.数字游戏(搜索) 4.无聊的逗(状态搜索) 5.礼物(二分法和前缀和) 1.印章(动态规划) 问题描述 共有n种图案的印章,每种图案的出现概率相 ...
- 蓝桥杯算法训练合集四 1.p0802 2.A的B的C次方次方 3.出现次数最多的整数 4.成绩分级 5.台阶问题
目录 1.p0802 2.A的B的C次方次方 3.出现次数最多的整数 4.成绩分级 5.台阶问题 1.p0802 问题描述 编写一个字符串表达式求解函数int expression(char* s); ...
- 蓝桥杯算法训练合集十二 1.比较2.计算最小公倍数3.比赛安排4.潜伏者5.P0702
目录 1.比较 2.计算最小公倍数 3.比赛安排 4.潜伏者 5.P0702 1.比较 问题描述 给出一个n长的数列,再进行m次询问,每次询问询问两个区间[L1,R1],[L2,R2], 询问数列第L ...
- 蓝桥杯算法训练合集十七 1.数字反转2.试题39713.矮人采金子4.筛法5.机器指令
目录 1.数字反转 2.试题3971 3.矮人采金子 4.筛法 5.机器指令 1.数字反转 问题描述 给定一个整数,请将该数各个位上数字反转得到一个新数.新数也应满足整数的常见形式,即除非给定的原数为 ...
- 蓝桥杯算法训练合集十五 1.打翻的闹钟2.智斗锅鸡3.文件列表
目录 1.打翻的闹钟 2.智斗锅鸡 3.文件列表 1.打翻的闹钟 问题描述 冯迭伊曼晚上刷吉米多维奇刷的太勤奋了,几乎天天迟到.崔神为了让VonDieEman改掉迟到的坏毛病,给他买了个闹钟. 一天早 ...
- 蓝桥杯基础练习合集一(C语言) 1.A+B问题2.数列排序3.十六进制转八进制4.十六进制转十进制5.十进制转十六进制
目录 1.A+B问题 2.数列排序 3.十六进制转八进制 4.十六进制转十进制 5.十进制转十六进制 1.A+B问题 问题描述 输入A.B,输出A+B. 输入格式 输入的第一行包括两个整数,由空格分隔 ...
- 蓝桥杯 算法训练 印章
蓝桥杯 算法训练 印章 共有n种图案的印章,每种图案的出现概率相同.小A买了m张印章,求小A集齐n种印章的概率. 输入输出: 一行两个正整数n和m 一个实数P表示答案,保留4位小数. 样例: 2 3 ...
最新文章
- MediaWiki安装
- 程序、进程、线程的关系
- ThinkServer TD340服务器安装操作系统[转]
- 破解32位NT6内核系统(vista/win7 8G以上)的内存限制,完美支持4GB至128GB内存,全新教程!
- 没写client,想先测试server端怎么办?
- 正则表达式与相关工具
- 禁用浏览器cache,是浏览器上的回退按钮失效。
- 复旦 | DialogVED:用于对话响应生成的预训练隐变量编码-解码模型
- 大数据工作由哪几部分组成
- 1.1 linux介绍
- spring学习笔记整理--03(Spring的三种实例化Bean的方式)
- 你家的猫也能来段东北话了:快手快影一键「智能配音」,三种方言随意换,还能配出《舌尖》风...
- wincc7.4安装记录
- mdt 计算机名_MDT Administrator
- linux内网劫持教程,利用kali进行dns劫持入侵局域网
- Java中模拟评分系统_评分系统.java
- android 自定义viewpager指示器,Android自定义View Flyme6的Viewpager指示器
- QT笔记——临时的悬浮窗口
- python里面的pip是什么意思_python中的pip是什么意思
- Beyond compare添加插件