算法设计练笔

news2024/10/6 8:15:30

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::vector
    Interval 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;   // 记录当前结束时间

    // 遍历排序后的intervals
    for (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 ;

else

return 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";
        else
            cout<<"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;

        }

        else

            cout<<"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);

	else

		return count(s+1,x);

}



int main()

{

    char s[80],x;

	cin>>s>>x;

	if (check(s,x))

		cout<<"YES "<<count(s,x);

	else

		cout<<"NO";

	return 0;

}


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

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

相关文章

nacos源码 nacos注册中心1.4.x 源码 spring cloud alibaba 的discovery做了什么 nacos客户端是如何启动的(二)

spring-cloud-alibaba-nacos-discovery 老版本中如何调用nacos的 1. 整体结构&#xff1a; 2. 思考: 如果你来做&#xff0c;如何做client 向server注册服务&#xff1a; 1.2.1 读yml&#xff0c;或本地文件找到服务器地址&#xff0c;以及其他配置 1.2.2 向server注册服务 1.2…

【中项第三版】系统集成项目管理工程师 | 第 4 章 信息系统架构① | 4.1-4.2

前言 第4章对应的内容选择题和案例分析都会进行考查&#xff0c;这一章节属于技术相关的内容&#xff0c;学习要以教材为准。本章分值预计在4-5分。 目录 4.1 架构基础 4.1.1 指导思想 4.1.2 设计原则 4.1.3 建设目标 4.1.4 总体框架 4.2 系统架构 4.2.1 架构定义 4.…

encrypt decrypt CA

encrypt & decrypt & CA 加密解密证书

Cyuyan中的动态内存管理!!(对后面学习数据结构至关重要)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、为什么要进行动态内存分配二、实现动态内存分配的三种库函数&#xff08;一&#xff09;、malloc函数&#xff08;二&#xff09;、calloc函数&#xff08;…

Qt5.9.9 关于界面拖动导致QModbusRTU(QModbusTCP没有测试过)离线的问题

问题锁定 参考网友的思路&#xff1a; Qt5.9 Modbus request timeout 0x5异常解决 网友认为是Qt的bug&#xff0c; 我也认同&#xff1b;网友认为可以更新模块&#xff0c; 我也认同&#xff0c; 我也编译了Qt5.15.0的code并成功安装到Qt5.9.9中进行使用&#xff0c;界面拖…

可验证算法在招投标领域的专家“盲抽”中的标段识别码加密应用研究

摘要 在招投标过程中&#xff0c;标段&#xff08;包&#xff09;识别码的安全性至关重要。本文提出了一种基于可验证算法的标段识别码加密方法&#xff0c;以确保其在专家“盲抽”过程中的保密性和可信性。通过对不同表的标段识别码进行全量加密&#xff0c;并通过匹配验证其…

绿色金融相关数据合集(2007-2024年 具体看数据类型)

数据类型&#xff1a; 1.绿色债券数据&#xff1a;2014-2023 2.绿色信贷相关数据&#xff1a;2007-2022 3.全国各省及地级市绿色金融指数&#xff1a;1990-2022 4.碳排放权交易明细数据&#xff1a;2013-2024 5.绿色金融试点DID数据&#xff1a;2010-2023 数据来源&#…

RK3588 Android12实现UVC输出功能详解

首先需要在相关部分添加uvc的功能&#xff0c;这里参考一下&#xff1a;rockchip rk3588添加uvc及uvc,adb的复合设备_uvc.gs6-CSDN博客 setprop sys.usb.config none;setprop sys.usb.config uvc 或者setprop sys.usb.config none;setprop sys.usb.config uvc,adb 使rk3588 进…

为什么需要服务器?服务器可以做些什么

目录 一、服务器和电脑的区别二、什么是SSH三、什么是免密码登录四、服务器如何实现SSH免密码登录 一、服务器和电脑的区别 服务器和电脑是两种不同类型的计算机系统&#xff0c;它们在设计、功能和用途上存在明显的区别。首先&#xff0c;从硬件配置上看&#xff0c;服务器通…

基于java+springboot+vue实现的大学生就业需求分析系统(文末源码+Lw)233

摘 要 信息数据从传统到当代&#xff0c;是一直在变革当中&#xff0c;突如其来的互联网让传统的信息管理看到了革命性的曙光&#xff0c;因为传统信息管理从时效性&#xff0c;还是安全性&#xff0c;还是可操作性等各个方面来讲&#xff0c;遇到了互联网时代才发现能补上自…

基于java+springboot+vue实现的药店管理系统(文末源码+Lw)285

摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;药品信息因为其管理内容繁杂&#xff0c;管理数量繁多导致手工进行处理不能满足广…

【Linux】:程序地址空间

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下有关Linux程序地址空间的相关知识点&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从…

016-GeoGebra基础篇-加载项错误_使用此功能所需的服务已关闭,请检查你的隐私设置,

最近有伙伴说遇到一个问题&#xff1a;“加载项错误_使用此功能所需的服务已关闭&#xff0c;请检查你的隐私设置”&#xff0c;该怎么解决&#xff1f; 若大家也遇到同样的问题&#xff0c;建议按照我下边的步骤逐个排查下&#xff0c;基本可以解决“GeoGebra无法完美插入PPT…

利用border绘制三角技巧

绘制三角形的效果如图 <html lang"zh-cn"> <head><meta charset"UTF-8"><title>demo</title><style>* {margin: 0;padding: 0;}.box {/* 盒子宽高改成零就变成三角形 &#xff0c;需要哪个方向的三角形就设置哪个方向…

PD协议诱骗芯片,XSP08Q,XSP16应用笔记

XSP08Q是3C数码或小家电产品的Type-C接口控制芯片&#xff0c;它负责和PD充电器通讯&#xff0c;获取充电器的快充电压档位&#xff0c;如5V4A&#xff0c;9V3A&#xff0c;12V2A&#xff0c;15V3A&#xff0c;20V5A等等。 XSP08Q支持PD协议&#xff0c;BC1.2协议&#xff0c;Q…

Spring MVC 获取请求数据的四种方式,以及获取请求头数据,获取Cookie 的数据,设置Spring MVC 的字符集编码过滤器

1. Spring MVC 获取请求数据的四种方式&#xff0c;以及获取请求头数据&#xff0c;获取Cookie 的数据&#xff0c;设置Spring MVC 的字符集编码过滤器 文章目录 1. Spring MVC 获取请求数据的四种方式&#xff0c;以及获取请求头数据&#xff0c;获取Cookie 的数据&#xff0c…

【IT领域新生必看】Java中的Static关键字详解:小白也能轻松掌握的神奇用法

文章目录 引言什么是Static关键字&#xff1f;Static变量&#xff08;类变量&#xff09;定义和使用示例&#xff1a; 应用场景 Static方法&#xff08;类方法&#xff09;定义和使用示例&#xff1a; 应用场景 Static代码块定义和使用示例&#xff1a; 应用场景 Static嵌套类定…

ESP32 通过蓝牙显示歌词代码示例

通过蓝牙协议播放音乐&#xff0c;有的时候需要显示歌词&#xff0c;这里就是a2dp库获取了歌词 值得注意的是要想正确获取到歌词&#xff0c;必须打开各种播放器的字幕&#xff08;歌词&#xff09;开关 本项目用了三个开源库 a2dp&#xff0c;tft_espi,xfont. a2dp &#x…

Qt 网络编程 udp通信

学习目标&#xff1a;使用udp通信 前置环境 运行环境:qt creator 4.12 学习内容 UDP 协议基础知识 1、UDP(用户数据报协议)是轻量的、不可靠的、面向数据报、无连接的协议&#xff0c;用于可靠性要求不高的场合。两个应用程序之间进行UDP 通信不需先建立持久的 socket 连接…

【IT领域新生必看】解密Java中的静态方法与实例方法:小白也能轻松掌握的全方位指南

文章目录 引言什么是静态方法&#xff1f;定义和使用静态方法示例&#xff1a; 静态方法的特点示例&#xff1a; 什么是实例方法&#xff1f;定义和使用实例方法示例&#xff1a; 实例方法的特点示例&#xff1a; 静态方法与实例方法的区别作用范围示例&#xff1a; 访问权限示…