算法设计练笔

T1、给定由n个整数(可能为负数)组成的序列a1,a2,...,an,求该序列子段和的最大值。当所有整数均为负数时,其最大子段和为0。

【输入】

第一行一个整数,表示n的值, 1<=n<=100;

第二行n个整数,表示a1,a2,...,an的值。

【输出】

一个整数,表示最大子段和

【输入样例】

6

-2 11 -4 13 -5 -2

【输出样例】

20

#include<bits/stdc++.h>
using namespace std;
int n;
const int mx=101;
int a[mx];
int ans,t;
int main(){cin>>n;for(int i=1;i<=n;i++)cin>>a[i];t=0;ans=0;for(int i=1;i<=n;i++){if(t<0)t=a[i];else t+=a[i];if(ans<t)ans=t;}cout<<ans<<endl;return 0;
}

T2、某体育馆有一羽毛球场出租,现在总共有n位客户申请租用此羽毛球场,每个客户i所租用的时间为[s(i),f(i)),其中s(i)表示开始租用时刻,f(i)表示结束租用时刻。同一时刻该羽毛球场只能租借给一位客户,体育馆最多能够满足多少位客户的需求?

【输入】

第一行一个整数 ,表示n 的值,1<=n<=100;

下面n行,每行二个整数,分别表示每个客户租用的开始时刻和结束时刻。

【输出】

一个整数,表示最多能够满足的客户数量。

【输入样例】

 3

5 8

1 6

7 10

【输出样例】

2

#include <iostream>
#include <algorithm> // 用来排序using namespace std;// 定义一个结构体来存储开始时间和结束时间
struct Interval {int start, end;
};// 比较函数,用来按照结束时间排序
bool compare(const Interval &a, const Interval &b) {return a.end < b.end;
}int main() {int n;cin >> n;// 使用结构体数组代替std::vectorInterval intervals[n];// 读取输入并存储到intervals中for (int i = 0; i < n; ++i) {cin >> intervals[i].start >> intervals[i].end;}// 按照结束时间对intervals进行排序sort(intervals, intervals + n, compare);// 打印排序后的数组for (int i = 0; i < n; i++) {cout << intervals[i].start << " " << intervals[i].end << endl;}int count = 0; // 记录满足的客户数量int end = -1;   // 记录当前结束时间// 遍历排序后的intervalsfor (int i = 0; i < n; ++i) {if (intervals[i].start >= end) {// 如果当前区间的开始时间大于等于上一个区间的结束时间,则可以安排count++;end = intervals[i].end; // 更新当前结束时间}}// 输出最多能够满足的客户数量cout << count << endl;return 0;
}

T3、某码头需要将n个集装箱装上一艘载重为C的轮船,其中集装箱i的重量为wi(0<=i<=n-1)。最佳装载问题是指在装载体积不受限的情况下,使得装箱数目最多的装载方案。

【输入】

第一行二个整数,表示n 和 C 的值,1<=n<=50, 1<=C<=1000。

第二行n个整数,分别表示集装箱的重量。

【输出】

一个整数,表示最多装箱数目。

【输入样例】

5 10

3 8 1 5 7

【输出样例】

3

#include<bits/stdc++.h>
using namespace std;
int n,C;
const int mx=51;
int w[mx];int main(){cin>>n>>C;for(int i=0;i<n;i++){cin>>w[i];}int dp[C+1]={0};//外层循环遍历每个物品for(int i=0;i<n;i++){//内层循环从C开始递减到物品的重量w[i]。	for(int j=C;j>=w[i];j--){// 如果当前集装箱的重量w[i]<=当前载重j,则考虑是否选择它//如果选择当前物品(即重量为w[i]的物品),//则计算1 + dp[j - w[i]](表示选择这个物品后剩余载重j - w[i]能装箱的最大数量),//并将其与dp[j](不选择这个物品时的最大数量)进行比较,//取较大值作为新的dp[j]。dp[j]=max(dp[j],1+dp[j-w[i]]);}}cout<<dp[C]<<endl;return 0;
} 

T4、给定含有 n 个不同的数的数组 L = 〈x1, x2, . . . , xn〉. 如果 L 中存在 x, 使得 x1 <x2 < · · · < xi−1 < xi > xi+1 > · · · > xn, 则称 L 是单峰的, 并称 xi 是 L 的 “峰顶”. 假设L 是单峰的, 设计一个算法找到 L 的峰顶. 如果这些数中存在峰顶元素xi,则输出该元素的下标i,否则输出0.

#include<iostream>using namespace std;int mounton(int n, int a[], int* abs){int i = 0, j = n - 1;while (i < j){if (a[i + 1] >= a[i]) i++;else if (a[j - 1] >= a[j]) j--;else break;}if (i == 0 || j == n - 1 || i < j){(*abs) = 0;}else if (i == j) (*abs) = i;return 1;}int main(){int n, abs = 0;cin >> n;int a[10000];for (int i = 0; i < n; i++){cin >> a[i];}mounton(n, a, &abs);if (abs != 0) cout << abs + 1;else cout << abs;}

T5、在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。

#include<iostream>using namespace std;void fun(int n, int a[], int* sum){for (int i = 0; i < n; i++){for (int j = i + 1; j < n; j++){if(a[i]>a[j]) (*sum)++;}}}int main(){int n=0,sum=0;int a[10000];cin >> n;for (int i = 0; i < n; i++){cin >> a[i];}fun(n, a, &sum);cout << sum;}

T6、设计一个递归算法和一个迭代算法计算二项式系数:

输入:n m

输出:二项式系数

例:

输入:10 3

输出:120

#include<bits/stdc++.h>using namespace std;int C1(int m, int n) //递归{if (m>n-m) m=n-m;if (m==0) return 1 ;elsereturn C1(m,n-1)+C1(m-1,n-1);}int C2(int m, int n) //迭代{if (m>n-m ) m=n-m ;int *fac=new int [n+1]; //fac[]存储所有不超过n的阶乘fac[0]=1;for (int i=1;i<=n;i++)fac[i]=i*fac[i-1];int res=fac[n]/fac[m]/fac[n-m];delete[] fac;return res;}int main(){int m,n;cin>>n>>m;cout<<C1(m,n);//cout<<C2(m,n);return 0;}
    #include<iostream>using namespace std;long long fun(long long,long long);int main(){long long n,m;cin>>n>>m;cout<<fun(n,m);return 0;}long long fun(long long n,long long m){if(m==n||m==0) return 1;else return fun(n-1,m-1)+fun(n-1,m);}

T7、设计一个递归算法判断给定的字符串是否为“回文”。所谓“回文”是指顺读和倒读都一样的字符串。如“XYZYX”和“xyzzyx”都是回文。

输入:字符串(一行,不超过80个字符)。

输出:YES或NO

例:

输入:XYZYX

输出:YES

#include<bits/stdc++.h>
using namespace std;
int huiwen(char* str,int len){if(len==0||len==1)return 1;if(str[0]!=str[len-1])return 0;return huiwen(str+1,len-2);
}int main(){char s[80];cin>>s;if (huiwen(s,strlen(s))) cout<<"YES";else cout<<"NO";return 0;
}
    #include<iostream>#include<string.h>using namespace std;bool fun(string s,int start,int end){if(start>=end) return true;else  return s[start]==s[end] && fun(s,start+1,end-1);}int main(){string s;cin>>s;if(fun(s,0,s.size()-1))cout<<"YES";elsecout<<"NO";return 0;}

T8、给定一个英文字母字符和数字字符组成的字符串s和一个字母或数字字符x,编写递归算法实现:(1)检查x是否在s中。(2)计算x在s中出现的次数。

输入:字符串s 字符x

输出:YES  出现次数   (出现时)

         NO                    (不出现时)

例:

输入:XYXZZZY Z

输出:YES 3

    #include<iostream>#include<string.h>using namespace std;int  fun(char *p,char x){int count=0;if(*p){if((*p)==x)count++;count+=fun(p+1,x);}return count;}int main(){char s[10000];cin>>s;char x;cin>>x;int cou=fun(s,x);if(0!=cou){cout<<"YES "<<cou;}elsecout<<"NO";return 0;}
#include<bits/stdc++.h>using namespace std;int check(char* s,char x){if (*s=='\0')return 0;if (*s==x)return 1;return check(s+1,x);    	}int count(char *s,char x){if (*s=='\0')return 0;if (*s==x)return 1+count(s+1,x);elsereturn count(s+1,x);}int main(){char s[80],x;cin>>s>>x;if (check(s,x))cout<<"YES "<<count(s,x);elsecout<<"NO";return 0;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/41708.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Unity URP】通过代码动态添加URP渲染通道RendererFeature

URP的渲染通道RendererFeature可以很方便的实现一些渲染问题,比如渲染顺序问题,遮挡后的材质替换等等。 那么我们如何通过代码来动态添加和修改呢? 首先我们需要获取到当前的URP配置文件,在对配置文件进行添加 1.通过反射获取当前UniversalRendererData 我们通过Graphic…

中国移动中国联通中国电信数字化转型营销销售讲师培训老师讲授AIGC大模型人工智能5G云算力网络云网终端AIGC人工智能宽带政企物联网专线 IDC智慧城市

唐兴通 数字化商业创新顾问、新媒体营销专家、数字化销售增长教练、沃顿商学院演讲嘉宾。全球创新增长战略大家EM罗杰斯&#xff08;创新的扩散&#xff09;、杰弗里摩尔&#xff08;跨越鸿沟&#xff09;、亨利切萨布鲁夫&#xff08;开放式创新&#xff09;在中国合作者。《…

gitee代码初次上传步骤

ps. 前提是已经下载安装gitee 一、在本地项目目录下空白处右击&#xff0c;选择“Git Bash Here” 二、初始化 git init 三、添加、提交代码&#xff08;注意add与点之间的空格&#xff09; git add . git commit -m 添加注释 四、连接、推送到gitee仓库 git remote add …

Java——IO流(二)-(4/7):不同编码读取乱码的问题,转换流-InputStreamReader、OutputStreamWriter

目录 不同编码读取出现乱码的问题 转换流 InputStreamReader(字符输入转换流) 实例演示(1) OutputStreamWriter(字符输出转换流) 实例演示(2) 不同编码读取出现乱码的问题 如果代码编码和被读取的文本文件的编码是一致的&#xff0c;使用字符流读取文本文件时不会出现乱…

【Mac】adobe CameraRaw 16 for mac(ps插件RAW处理工具)软件介绍

软件介绍 Adobe Camera Raw是一款专为处理和编辑数字照片原始文件&#xff08;RAW文件&#xff09;而设计的插件&#xff0c;它提供了丰富的功能来调整和优化图像。以下是它的主要特点和功能&#xff1a; 支持广泛的RAW格式&#xff1a; Adobe Camera Raw 16 支持处理来自各…

推出新的C2000™ F28P65x 实时微控制器,专为高效控制电力电子产品而构建(F28P650DH、F28P650DK、F28P650SH)

C2000™ F28P65x 实时微控制器是集中级性能、PWM 和模拟创新与系统成本优化等优势于一身。 F28P65x 系列是 C2000™ 实时微控制器 (MCU) 系列的中级性能系列产品&#xff0c;专为高效控制电力电子产品而构建。凭借超低延迟&#xff0c;F28P65x 通过更多的模拟功能和新的 PWM 功…

关于Unity粒子(2D序列帧粒子)的旋转、StartRotation值用脚本怎么动态设置

今天要用粒子做一个拖尾效果。由于对象的移动可以向任何方向&#xff0c;所以作为拖尾的粒子要根据方向做相应的旋转。 1.没有旋转的情况&#xff08;物体向下移动&#xff09;时&#xff0c;默认是下面这样的。 粒子发射器的形状是一个向上的长方形&#xff0c;粒子的移动方向…

基于LabVIEW的设备安装螺栓连接设计

介绍了一种基于LabVIEW的辅助设备安装螺栓连接设计案例。通过LabVIEW软件&#xff0c;实现了从螺栓规格预估、强度校核到物料选用的整个流程的软件化&#xff0c;提高了设计效率和安装可靠性。 项目背景 在轨道车辆设备安装中&#xff0c;螺栓连接作为一种常见的紧固方式&…

Python制作动态颜色变换:颜色渐变动效

文章目录 引言准备工作前置条件 代码实现与解析导入必要的库初始化Pygame颜色变换函数主循环 完整代码 引言 颜色渐变动画是一种视觉上非常吸引人的效果&#xff0c;常用于网页设计和图形应用中。在这篇博客中&#xff0c;我们将使用Python创建一个动态颜色变换的动画效果。通…

大学教师门诊预约小程序-计算机毕业设计源码73068

摘要 在当今数字化、信息化的浪潮中&#xff0c;大学校园的服务管理正朝着智能化、便捷化的方向迈进。为了优化大学教师的医疗体验&#xff0c;提升门诊预约的效率和便捷性&#xff0c;我们基于Spring Boot框架设计并实现了一款大学教师门诊预约小程序。该小程序不仅提供了传统…

数据集归一化处理

&#x1f4da;博客主页&#xff1a;knighthood2001 ✨公众号&#xff1a;认知up吧 &#xff08;目前正在带领大家一起提升认知&#xff0c;感兴趣可以来围观一下&#xff09; &#x1f383;知识星球&#xff1a;【认知up吧|成长|副业】介绍 ❤️如遇文章付费&#xff0c;可先看…

8分钟带你快速了解Connector/Catalog API的核心设计

引言 在现代大数据应用中&#xff0c;数据集成和同步成为企业数据管理的关键环节。随着数据源和数据库的多样化&#xff0c;如何高效地进行数据集成成为企业面临的重要挑战。 Apache SeaTunnel 作为一款开源的数据集成工具&#xff0c;致力于解决这一问题。本文将详细介绍 Sea…

【Oracle】Oracle常用函数

目录 聚合函数数字函数1. ABS函数&#xff1a;返回一个数的绝对值。2. CEIL函数&#xff1a;返回大于等于给定数的最小整数。3. FLOOR函数&#xff1a;返回小于等于给定数的最大整数。4. ROUND函数&#xff1a;将一个数四舍五入到指定的小数位。5. MOD函数&#xff1a;返回两个…

Java 面向对象编程(OOP)的四大特征

Java 面向对象编程&#xff08;OOP&#xff09;的四大特征 1、抽象2、继承3、 封装4、多态性 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Java编程中&#xff0c;面向对象编程&#xff08;OOP&#xff09;是一个核心概念。OOP的四大基…

总结一下 .NET FrameWork 和 .NET Core 创建的项目的不同点

前言 从 Visual Studio 2022 开始&#xff0c;微软开始淡化 .NET Framework 的概念&#xff0c;在项目向导中&#xff0c;只有使用带 “.NET Framework” 的项目模板创建的才是 .NET Framework 项目&#xff0c;使用其他模板创建的都是 .NET Core 项目 比如&#xff0c;如果你…

​智汇云舟参编的数字孪生团标在2024全球数字经济大会上发布

7月4日&#xff0c;2024全球数字经济大会元宇宙创新发展论坛&#xff0c;2024年“创客中国”元宇宙中小企业创新创业大赛颁奖活动在北京成功举办。智汇云舟作为数字孪生行业头部企业和视频孪生技术首倡者受邀出席活动&#xff0c;并与中国人民大学、摩尔线程等11家知名院校和企…

Java | Leetcode Java题解之第218题天际线问题

题目&#xff1a; 题解&#xff1a; class Solution {public List<List<Integer>> getSkyline(int[][] buildings) {PriorityQueue<int[]> pq new PriorityQueue<int[]>((a, b) -> b[1] - a[1]);List<Integer> boundaries new ArrayList&l…

算法库应用--寻找最长麦穗

学习贺利坚老师算法库 数据结构例程——串的顺序存储应用_使用顺序串存储身份证号-CSDN博客 本人详细解析博客 串的顺序存储的应用实例二_串的顺序存储应用-CSDN博客 版本更新日志 V1.0: 在原有的基础上, 进行优化名字, 并且有了相应的算法库作为支撑, 我使用了for循环来代替老…

【Linux进阶】ext2文件系统(inode)

1.再谈inode (1) 理解inode&#xff0c;要从文件储存说起。 文件储存在硬盘上&#xff0c;硬盘的最小存储单位叫做"扇区"&#xff08;Sector&#xff09;。每个扇区储存512字节&#xff08;相当于0.5KB&#xff09;。操作系统读取硬盘的时候&#xff0c;不会一个个…

jenkins学习

一、jenkins介绍 1.介绍 Jenkins 是一款流行的开源持续集成&#xff08;Continuous Integration&#xff09;工具&#xff0c;广泛用于项目开发&#xff0c;具有自动化构建、测试和部署等功能 2.特点 开源的Java语言开发持续集成工具&#xff0c;支持持续集成&#xff0c;持…