蓝桥杯算法训练合集八 1.数的划分2.求先序排列3.平方计算4.三角形高5.单词复数
目录
1.数的划分
2.求先序排列
3.平方计算
4.三角形高
5.单词复数
1.数的划分
问题描述
将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序)。
例如:n=7,k=3,下面三种分法被认为是相同的。
1,1,5; 1,5,1; 5,1,1;
问有多少种不同的分法。
输入格式
n,k
输出格式
一个整数,即不同的分法
样例输入
7,3
样例输出
4 {四种分法为:1,1,5;1,2,4;1,3,3;2,2,3;}
数据规模和约定
6<n<=200,2<=k<=6
示例代码
#include<iostream>
using namespace std;
int main() {int n, k;cin >> n >> k;int cnt = 0;for (int a = 1; a <= (n / k); a++) {//让算法运行时间更短for (int b = a; b <= (n - a); b++) {//为了保证不重复,必须大于等于前一个数if (k == 2) {//如果由两个数组成if (a + b == n) {cnt++;}}else {for (int c = b; c <= (n - a - b); c++) {if (k == 3) {//如果由三个数组成if (a + b + c == n) {cnt++;}}else {for (int d = c; d <= (n - a - b - c); d++) {if (k == 4) {//如果由四个数组成if (a + b + c + d == n) {cnt++;}}else {for (int e = d; e <= (n - a - b - c - d); e++) {if (k == 5) {//如果由五个数组成if (a + b + c + d + e == n) {cnt++;}}else {//如果由六个数组成for (int f = e; f <= (n - a - b - c - d - e); f++) {if ((a + b + c + d + e + f) == n) {cnt++;}}}}}}}}}}}cout << cnt;return 0;
}
2.求先序排列
问题描述
给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度<=8)。
输入格式
两行,每行一个字符串,分别表示中序和后序排列
输出格式
一个字符串,表示所求先序排列
样例输入
BADC
BDCA
样例输出
ABCD
三种排列详解
一颗非空的二叉树由根节点及左、右子树这三个基本部分组成。二叉树的遍历有三种常用方式,分别为先序遍历(根节点->左子树-> 右子树)、中序遍历(左子树-> 根节点 -> 右子树)和后序遍历(左子树-> 右子树-> 根节点)。
更详细请看https://blog.csdn.net/elma_tww/article/details/85640912
示例代码
#include<iostream>
#include<string.h>
using namespace std;char geng;
int index;
string a, b;
char zhong[8], hou[8];void dfs(char zhong[8],char hou[8]) {char zhuo1[8], you1[8], zhuo2[8], you2[8];if (zhong[0] == '\0') {//如果该子树已经为空,则程序结束,返回上一步return;}int len = 0;//cout << "该中序子树为";for (int i = 0; i < 8; i++) {//找到该子树长度//cout << zhong[i] <<" ";if (zhong[i]<65 || zhong[i]>90) {break;}len++;}//cout << endl;//cout << "该子树长度为 "<<len << endl;geng = hou[len - 1];//根节点cout << geng;if (len == 1) {//只有根节点return;}//得到新的左子树和右子树memset(zhuo1,'\0',sizeof(zhuo1));memset(zhuo2,'\0',sizeof(zhuo2));memset(you1,'\0',sizeof(you1));memset(you2,'\0',sizeof(you2));//cout << "找索引值";for (int i = 0; i <len; i++) {//cout << zhong[i]<<" ";if (zhong[i] == geng) {//cout << endl<<"找到了"<<zhong[i] << " ";index = i;break;}}//cout << endl;//cout << "该根的索引值为 " << index << endl;//cout << "中序左子树";for (int i = 0;i<index; i++) {//中序左子树zhuo1[i] = zhong[i];//cout << zhuo1[i];}//cout << endl;//cout << "中序右子树";for (int i = index + 1; i < len; i++) {//中序右子树you1[i-index-1] = zhong[i];//cout << you1[i - index - 1];}//cout << endl;//cout << "后序左子树";for (int i = 0; i < index; i++) {//后序左子树zhuo2[i] = hou[i];//cout << zhuo2[i];}//cout << endl;//cout << "后序右子树";for (int i = index; i < len - 1; i++) {//后序右子树you2[i - index] = hou[i];//cout << you2[i - index];}//cout << endl;dfs(zhuo1, zhuo2);dfs(you1, you2);return;
}
int main() {cin >> a >> b;int cnt = a.length();//cout << "一开始长度" <<cnt<< endl;for (int i = 0; i < cnt; i++) {zhong[i] = a[i];hou[i] = b[i];}dfs(zhong, hou);system("pause");return 0;
}
3.平方计算
问题描述
输入正整数a, m,输出a^2%m,其中^表示乘方,即a^2表示a的平方,%表示取余。
输入格式
输入包含两个整数a, m,a不超过10000。
输出格式
输出一个整数,即a^2%m的值。
样例输入
5 6
样例输出
1
示例代码
#include<iostream>
using namespace std;int main() {int a, b, ans;cin >> a >> b;a = a * a;ans = a % b;cout << ans;return 0;
}
4.三角形高
问题描述
编写一个程序,输入三个实数(double类型)a、b和c作为三角形的三条边;如果三条边能构成三角形,则输出最长边对应的高的长度;如果不能构成三角形,则输出“NO”。结果保留6位小数。
提示:三角形面积计算可以采用海伦-秦九韶公式:
S=sqrt( p(p-a)(p-b)(p-c) )
p = (a+b+c) / 2
样例输入
1.0 2.0 3.0
样例输出
NO
样例输入
3.0 4.0 5.0
样例输出
2.400000
示例代码
#include<iostream>
#include<math.h>
#include<iomanip>
using namespace std;int main() {double a, b, c, temp, p, s, ans, max = 0;cin >> a >> b >> c;if (max < a) {//找最大边max = a;}if (max < b) {max = b;}if (max < c) {max = c;}if ((a + b > c) && (a + c > b) && (b + c > a)) {//任意两边之和大于第三边p = (a + b + c) / 2;temp = p * (p - a) * (p - b) * (p - c);s = sqrt(temp);ans = 2 * s / max;cout << fixed << setprecision(6) << ans << endl;}else {cout << "NO";}return 0;
}
5.单词复数
问题描述
编写一个函数RegularPlural,其功能是实现一个英文单词的复数形式。复数的规则为:
如果单词末尾为s,x,z,ch或sh,则在后面加es;
如果单词末尾为y,且前一个字母为辅音(除a, e, i, o, u以外的其它情况),则把y改成ies;
如果是其它情形,一律在后面加s。
编写测试程序,输入一个长度小于20的单词,输出该单词的复数形式。(注:出自课本第七章第9题)
样例输入
box
样例输出
boxes
示例代码
#include<iostream>
#include<string.h>
using namespace std;char s[20];void RegularPlural(char s[20]) {int len = strlen(s);//cout << len << endl;if (s[len - 1] == 's' || s[len - 1] == 'x' || s[len - 1] == 'z' || ((s[len - 1] == 'h') && ((s[len - 2] == 'c') || s[len - 2] == 's'))) {//第一种情况s[len] = 'e';s[len + 1] = 's';}else if ((s[len - 1] == 'y') && (s[len - 2] != 'a' && s[len - 2] != 'e' && s[len - 2] != 'i' && s[len - 2] != 'o' && s[len - 2] != 'u')) {//第二种情况s[len - 1] = 'i';s[len] = 'e';s[len + 1] = 's';}else {//第三种情况s[len] = 's';}return;
}int main() {cin >> s;RegularPlural(s);int cnt = strlen(s);//cout << cnt << endl;for (int i = 0; i < cnt; i++) {cout << s[i];}return 0;
}
蓝桥杯算法训练合集八 1.数的划分2.求先序排列3.平方计算4.三角形高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种图案的印章,每种图案的出现概率相 ...
- 蓝桥杯算法训练合集三 1.车的位置2.24点3.最大分解4.RP大冒险5.士兵杀敌(二)
目录 1.车的位置(搜索) 2.24点(搜索) 3.最大分解(贪心) 4.RP大冒险 5.士兵杀敌(二) 1.车的位置(搜索) 问题描述 在一个n*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改掉迟到的坏毛病,给他买了个闹钟. 一天早 ...
- 蓝桥杯 算法训练 印章
蓝桥杯 算法训练 印章 共有n种图案的印章,每种图案的出现概率相同.小A买了m张印章,求小A集齐n种印章的概率. 输入输出: 一行两个正整数n和m 一个实数P表示答案,保留4位小数. 样例: 2 3 ...
- 蓝桥杯算法训练 印章
蓝桥杯 算法训练 印章 问题描述 共有n种图案的印章,每种图案的出现概率相同.小A买了m张印章,求小A集齐n种印章的概率. 输入格式 一行两个正整数n和m 输出格式 一个实数P表示答案,保 ...
最新文章
- 学习笔记Spark(十)—— Spark MLlib应用(2)—— Spark MLlib应用
- 企业实战02:Oracle数据库的安装和卸载
- java解压zip异常_java解压zip文件示例
- 测试开发之测试方法第二篇
- 原来程序员的大部分时间并不是写代码
- Centos系统python2.x升级python3.x
- oc UIAlertController封装
- 视频编解码(九):FFMPEG操作总结一
- 应用程序委托协议栈发送消息
- shell split分析日志文件
- 启示录:新加坡纬壹科技城成功建设经验
- 如何将PNG图像转换为word文档?
- ActionScript Adobe Flash Builder Adobe Flash CC 学习笔记
- Android中通过USB连接来控制硬件设备
- mysql自增不连续的问题 ALTER TABLE `表名` AUTO_INCREMENT =1;
- 【python】python基础与unittest基础
- Bandizip下载网盘地址
- ESD5401N-2/TR 瞬态电压抑制器 封装DFN1006-2L WILLSEM
- 思考项目 求1+2的2次方+3的3次方+4的4次方+5的5次方+6的6次方的值。(异种循环嵌套)
- Matlab如何绘制小提琴图?