国教 2019级 算法设计与分析 作业集锦(期末作业)

2023-11-01

7-1 寻找第k小的数 (20 分)

给定若干整数,请设计一个高效的算法,确定第k小的数。

输入格式:
测试数据有多组,处理到文件尾。每组测试数据的第1行输入2个整数n,k(1≤k≤n≤1000000)。第2行输入n个整数,每个数据的取值范围在0到1000000之间。

输出格式:
对于每组测试,输出第k小的数。

输入样例:

5 3
1 2 2 2 1
9 3
1 2 3 4 5 6 9 8 7

输出样例:

2
3

提示:
如果提交后超时,请注意需要设计的是高效的算法!如果你初学《数据结构》,暂时设计不出来,请学完相关知识再回头来做。
也可以使用STL之sort、nth_element函数求解。
另外,由于输入数据特别多,为减少输入数据的耗时,建议使用以下的输入外挂函数:

void scan_d(int &num)    
{
        char in;
        in=getchar();
        while(in<'0'||in>'9') in=getchar(); 
        num=in-'0';
        while(in=getchar(),in>='0'&&in<='9'){num*=10,num+=in-'0';}
}

调用方法如下:

int n;
scan_d(n);

解答:(简单sort)

#include<bits/stdc++.h>
using namespace std;
int main(){
	int n,k;
	int a[1000000];
	while(cin>>n){
		scanf("%d",&k);
		for(int i=0;i<n;i++){
			scanf("%d",&a[i]);
		}
		sort(a,a+n);
		printf("%d\n",a[k-1]);
	}
	return 0;
}

7-2 约瑟夫环 (20 分)

有n个人围成一圈(编号为1~n),从第1号开始进行1、2、3报数,凡报3者就退出,下一个人又从1开始报数……直到最后只剩下一个人时为止。请问此人原来的位置是多少号?

输入格式:
测试数据有多组,处理到文件尾。每组测试输入一个整数n(5≤n≤100)。

输出格式:
对于每组测试,输出最后剩下那个人的编号。

输入样例:

10
28
69

输出样例:

4
23
68

解答:(#有点难)

#include <bits/stdc++.h>
using namespace std;

int main() {
	int n;
	while ((scanf("%d", &n) != EOF)) {
		if (n == 0)
			break;
		int sum = 0;
		for (int i = 2; i < n + 1; i++) {
			sum = (sum + 3) % i;
		}
		cout << sum + 1 << endl;
	}
	return 0;
}

7-3 英文单词排序 (20 分)

本题要求编写程序,输入若干英文单词,对这些单词按长度从小到大排序后输出。如果长度相同,按照输入的顺序不变。

输入格式:
输入为若干英文单词,每行一个,以#作为输入结束标志。其中英文单词总数不超过20个,英文单词为长度小于10的仅由小写英文字母组成的字符串。

输出格式:
输出为排序后的结果,每个单词后面都额外输出一个空格。

输入样例:

blue
red
yellow
green
purple
#

输出样例:

red blue green yellow purple 

解答:(注意一定要用stable_sort) 感兴趣的同学可以在下面查查,这里就不赘述了。

#include <bits/stdc++.h>
using namespace std;
bool smp(string s, string b) {
	return s.size() < b.size();
}
string s1[21];
int main() {
	int i = 0;
	string s;
	cin >> s;
	while (s != "#") {
		s1[i] = s;
		i++;
		cin >> s;
	}
	stable_sort(s1, s1 + i, smp);
	for ( int a = 0; a < i; a++) {
		cout << s1[a] << " ";
	}
	return 0;
}

7-4 括号匹配 (20 分)

给定一串字符,不超过100个字符,可能包括括号、数字、字母、标点符号、空格,编程检查这一串字符中的( ) ,[ ],{ }是否匹配。

输入格式:
输入在一行中给出一行字符串,不超过100个字符,可能包括括号、数字、字母、标点符号、空格。

输出格式:
如果括号配对,输出yes,否则输出no。

输入样例1:

sin(10+20)

输出样例1:

yes

输入样例2:

{[}]

输出样例2:

no

解答 (栈的使用)

#include <bits/stdc++.h>
using namespace std;

string solve(string str) {
	stack<char> st;
	int i = 0;
	while (i < str.size()) {
		if (str[i] == '(' || str[i] == '{' || str[i] == '[')
			st.push(str[i]);
		else if (str[i] == ')') {
			if (st.size() == 0 || st.top() != '(') {
				return "no";
			}
			st.pop();
		} else if (str[i] == ']') {
			if (st.size() == 0 || st.top() != '[') {
				return "no";
			}
			st.pop();
		} else if (str[i] == '}') {
			if (st.size() == 0 || st.top() != '{') {
				return "no";
			}
			st.pop();
		}

		i++;
	}
	if (st.size() == 0)
		return  "yes";
	else
		return "no";
}


int main() {
	string str;
	//cin >> str;
	getline(cin, str);
	cout << solve(str);
	return 0;
}


7-5 函数的递归调用 (20 分)

有n个人坐在一起,第n个人比第n-1个人大2岁,第n-1个人比第n-2个人大2岁,以此类推,……,第1个人是10岁。请问第n个人年龄多大?

输入格式:
输入一个整数表示第几个人。

输出格式:
输出第n个人是m岁。

输入样例:

5

输出样例:

Number 5 is 18 age!

解答:(递归 找规律)

#include <bits/stdc++.h>
using namespace std;

int f(int n) {
	if (n == 1)
		return 10;
	return f(n - 1) + 2;
}

int main() {
	int n;
	cin >> n;
	cout << "Number " << n << " is " << f(n) << " age!";
	return 0;
}```

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

国教 2019级 算法设计与分析 作业集锦(期末作业) 的相关文章

  • InvalidOperationException - 对象当前正在其他地方使用 - 红十字

    我有一个 C 桌面应用程序 其中我连续创建的一个线程从源 实际上是一台数码相机 获取图像并将其放在 GUI 中的面板 panel Image img 上 这必须是另一个线程 如它是控件的代码隐藏 该应用程序可以工作 但在某些机器上 我会在随
  • 确保 StreamReader 不会挂起等待数据

    下面的代码读取从 tcp 客户端流读取的所有内容 并且在下一次迭代中它将仅位于 Read 上 我假设正在等待数据 我如何确保它不会在没有任何内容可供读取时返回 我是否必须设置低超时 并在失败时响应异常 或者有更好的办法吗 TcpClient
  • 提交后禁用按钮

    当用户提交付款表单并且发布表单的代码导致 Firefox 中出现重复发布时 我试图禁用按钮 去掉代码就不会出现这个问题 在firefox以外的任何浏览器中也不会出现这个问题 知道如何防止双重帖子吗 System Text StringBui
  • 在 DataView 的 RowFilter 中选择 DISTINCT

    我试图根据与另一个表的关系缩小 DataView 中的行范围 我使用的 RowFilter 如下 dv new DataView myDS myTable id IN SELECT DISTINCT parentID FROM myOthe
  • 为什么极端下派生类(多重虚拟继承)的大小包括超类成员大小的两倍?

    include
  • 获取两个工作日之间的天数差异

    这听起来很简单 但我不明白其中的意义 那么获取两次之间的天数的最简单方法是什么DayOfWeeks当第一个是起点时 如果下一个工作日较早 则应考虑在下周 The DayOfWeek 枚举 http 20 20 5B1 5D 3a 20htt
  • java.io.Serialized 在 C/C++ 中的等价物是什么?

    C C 的等价物是什么java io Serialized https docs oracle com javase 7 docs api java io Serializable html 有对序列化库的引用 用 C 序列化数据结构 ht
  • 由 IHttpClientFactory 注入时模拟 HttpClient 处理程序

    我创建了一个自定义库 它会自动为依赖于特定服务的 Polly 策略设置HttpClient 这是使用以下方法完成的IServiceCollection扩展方法和类型化客户端方法 一个简化的例子 public static IHttpClie
  • qdbusxml2cpp 未知类型

    在使用 qdbusxml2cpp 程序将以下 xml 转换为 Qt 类时 我收到此错误 qdbusxml2cpp c ObjectManager a ObjectManager ObjectManager cpp xml object ma
  • 如何在 32 位或 64 位配置中以编程方式运行任何 CPU .NET 可执行文件?

    我有一个可在 32 位和 64 位处理器上运行的 C 应用程序 我试图枚举给定系统上所有进程的模块 当尝试从 64 位应用程序枚举 32 位进程模块时 这会出现问题 Windows 或 NET 禁止它 我认为如果我可以从应用程序内部重新启动
  • 如何在 Xaml 文本中添加电子邮件链接?

    我在 Windows Phone 8 应用程序中有一些大文本 我希望其中有电子邮件链接 例如 mailto 功能 这是代码的一部分
  • 使用自定义堆的类似 malloc 的函数

    如果我希望使用自定义预分配堆构造类似 malloc 的功能 那么 C 中最好的方法是什么 我的具体问题是 我有一个可映射 类似内存 的设备 已将其放入我的地址空间中 但我需要获得一种更灵活的方式来使用该内存来存储将随着时间的推移分配和释放的
  • C#:帮助理解 UML 类图中的 <>

    我目前正在做一个项目 我们必须从 UML 图编写代码 我了解 UML 类图的剖析 但我无法理解什么 lt
  • C# 中的合并运算符?

    我想我记得看到过类似的东西 三元运算符 http msdn microsoft com en us library ty67wk28 28VS 80 29 aspx在 C 中 它只有两部分 如果变量值不为空 则返回变量值 如果为空 则返回默
  • “接口”类似于 boost::bind 的语义

    我希望能够将 Java 的接口语义与 C 结合起来 起初 我用过boost signal为给定事件回调显式注册的成员函数 这非常有效 但后来我发现一些函数回调池是相关的 因此将它们抽象出来并立即注册所有实例的相关回调是有意义的 但我了解到的
  • 将 MQTTNet 服务器与 MQTT.js 客户端结合使用

    我已经启动了一个 MQTT 服务器 就像this https github com chkr1011 MQTTnet tree master例子 该代码托管在 ASP Net Core 2 0 应用程序中 但我尝试过控制台应用程序 但没有成
  • 使用 %d 打印 unsigned long long

    为什么我打印以下内容时得到 1 unsigned long long int largestIntegerInC 18446744073709551615LL printf largestIntegerInC d n largestInte
  • 如果没有抽象成员,基类是否应该标记为抽象?

    如果一个类没有抽象成员 可以将其标记为抽象吗 即使没有实际理由直接实例化它 除了单元测试 是的 将不应该实例化的基类显式标记为抽象是合理且有益的 即使在没有抽象方法的情况下也是如此 它强制执行通用准则来使非叶类抽象 它阻止其他程序员创建该类
  • Oracle Data Provider for .NET 不支持 Oracle 19.0.48.0.0

    我们刚刚升级到 Oracle 19c 19 3 0 所有应用程序都停止工作并出现以下错误消息 Oracle Data Provider for NET 不支持 Oracle 19 0 48 0 0 我将 Oracle ManagedData
  • 当从finally中抛出异常时,Catch块不会被评估

    出现这个问题的原因是之前在 NET 4 0 中运行的代码在 NET 4 5 中因未处理的异常而失败 部分原因是 try finallys 如果您想了解详细信息 请阅读更多内容微软连接 https connect microsoft com

随机推荐

  • 英飞凌单片机编译器 TASKING TriCore Eclipse IDE 新建静态库工程

    前言 这篇介绍一下如何使用 TASKING 新建一个静态库的工程 编译成一个静态库 最后链接至应用程序工程中进行编译调试 编译成静态库也能debug界面调试 也可以打断点操作等 前提是保证源码和编译的静态库源码一致 且含有调试信息 下载 A
  • Android常用正则

    1 匹配以特定字符开头 特定字符结尾 private const val AT s S 匹配以 打头 空格结尾的字符 2 匹配手机号 const val REG PHONE 1 0 9 10 3 匹配判断是否汉字字母数字和 const va
  • Centos 7 freeradius 搭建企业wifi认证服务

    Centos 7 搭建Wpa认证服务 关键字 freeradius wpa eap 参考 http www racksam com 2017 03 02 centos7 install freeradius 路由器设置为WPA WPA2企业
  • 阿里Sentinel控制台源码修改-对接Apollo规则持久化

    改造背景 前面我们讲解了如何对接Apollo来持久化限流的规则 对接后可以直接通过Apollo的后台进行规则的修改 推送到各个客户端实时生效 但还有一个问题就是Sentinel控制台没有对接Apollo Sentinel控制台本来就可以修改
  • C++ inline用法

    1 引入 inline 关键字的原因 在 c c 中 为了解决一些频繁调用的小函数大量消耗栈空间 栈内存 的问题 特别的引入了 inline 修饰符 表示为内联函数 栈空间就是指放置程序的局部数据 也就是函数内数据 的内存空间 在系统下 栈
  • (fastjson)对象转JSON字符串 接收json字符串返回对象

  • 视频86免费影院-视频电影网聚平台

    这两年在互联网来讲 视频行业是比较火热的 各大视频分享网站 融资 风投 欢乐声一片 这表明中国的互联网用户随着网络带宽的加大对在线视频 电影还是比较喜欢的 正好在网上看到一个不错的网站程序 修改过后自己也来做一个视频网站 不过内容都是采集的
  • 建立Tahi IPv6测试环境

    首先说一下TAHI测试的相关术语 Tester Node TN 测试平台 A tester node for the conformance tests Node Under Test NUT 待测试机 A testee node for
  • oracle查看服务器名字,查看oracle数据库服务器的名字

    查看oracle数据库服务器的名字 windows 中 1 select name from v database 直接运行就可以查看了 2 查看tnsnames ora 的连接 有个SID SID就是服务名了 1 查看oracle的安装目
  • java 面向对象编程——简介

    目录 第一章 对象和类 一 面向对象的程序设计 1 抽象的数据类型 2 什么是类 3 总结 二 定义一个类 1 定义类的成员变量 2 定义类的成员的方法 3 类的成员变量和方法总结 4 创建并使用对象 第二章 方法 一 方法的重载 1 方法
  • Spring Cloud Alibaba版本选型

    Spring Cloud Alibaba版本选型 版本说明 https github com alibaba spring cloud alibaba wiki E7 89 88 E6 9C AC E8 AF B4 E6 98 8E
  • javac不是内部命令或外部命令

    JAVAC 不是内部或外部命令 也不是可运行的程序或批处理文件 今天在运行JAVA的时候突然出了这个错误 这可怎么办 刚接触JAVA的新手可能就不知道怎么解决 JAVAC 不是内部命令或外部命令 下面我就来说说 解决 JAVAC 不是内部命
  • Sed 介绍和教程

    Sed 介绍和教程 作者 Bruce Barnett 译者 Koala 原文地址 http www grymoire com Unix Sed html 注 译者不懂sed Sed 介绍 如果你想写一个程序对一个文件做一些改动 那就sed就
  • B站狂神说--ElasticSearch笔记

    课程 免费 网址 https www bilibili com video BV17a4y1x7zq spm id from 333 999 0 0 笔记来源 https www kuangstudy com bbs 14427364812
  • 知识图谱在金融领域的分析与应用

    本文首发于个人博客 www bobinsun cn 前言 知识图谱因其自身的图展示 图挖掘 图模型计算优势 可帮助金融从业人员进行业务场景的分析与决策 有利于建立客户画像 进行精准营销获客 发现信用卡套现 资金挪用等行为 更好的表达 分析金
  • 车规级MCU知识介绍

    一辆传统燃油车需要大约500到600颗芯片 轻混汽车大约需要1000颗 插电混动和纯电动汽车则需要至少2000颗芯片 这就意味着在智能电动汽车快速发展的过程中 不仅对先进制程芯片需求不断增加 而且对传统芯片需求也会持续增加 MCU就是这样
  • PXE装机报错汇总

    报错1 PXE E53 No boot filename received CLIENT MAC ADDR 88 0C 29 0D 88 3C GUID 564D6429 2E4A 0B83 6161 AE0A050D803C PXE MB
  • 【持续集成CI/持续部署CD】二、Docker安装Maven私服Nexus

    本文是关于通过 Docker 进行安装部署 Nexus3 私服的快速入门和简单使用案例 一 安装 1 通过 docker 获取最新版本的 nexus3 镜像 docker pull sonatype nexus3创建 docker 镜像到宿
  • Pytorch中交叉熵损失函数 nn.CrossEntropyLoss()计算过程

    pytorch的交叉熵损失函数是如何计算outputs和 labels之间的损失的 对于一个分类问题的CNN模型 最后一层的代码一般如下 nn Linear 2048 num classes 然后计算一次迭代损失的代码一般如下 loss f
  • 国教 2019级 算法设计与分析 作业集锦(期末作业)

    7 1 寻找第k小的数 20 分 给定若干整数 请设计一个高效的算法 确定第k小的数 输入格式 测试数据有多组 处理到文件尾 每组测试数据的第1行输入2个整数n k 1 k n 1000000 第2行输入n个整数 每个数据的取值范围在0到1