PAT《数据结构学习与实验指导》实验项目集 2-09 2-10 2-11 2-12 2-13
#include<cstdio>
#include<set>
#include<vector>
using namespace std; int findMatchBox(int tsize, vector<int> &box)
{
for(int i = ; i < box.size(); i++)
if(box[i] >= tsize)return i;
return -;
} int main()
{
int N;
scanf("%d", &N);
vector<int> box;//box[i]为箱子i的剩余容量
for(int i = ; i < N; i++)
{
int tsize;
scanf("%d", &tsize);
int boxindex = findMatchBox(tsize, box);
if(boxindex != -)
{
box[boxindex] -= tsize;
printf("%d %d\n", tsize, boxindex+);
}
else
{
box.push_back( - tsize);
printf("%d %d\n", tsize, box.size());
}
}
printf("%d\n", box.size());
return ;
}
这是一道智力推理题,假设有p个海盗,第一个海盗考虑分配方案时,他是建立在假设自己死后第二个海盗的分配方案基础上的,在题目的三个假设的基础上,他只要按如下方法分配即可:
- 给第二个人0个钻石,因为给不给第二个人钻石,他都会投反对票,因为他知道把第二个人投死后,让他来分配自己利益最大。 本文地址
- 对于其他人,在第二个海盗的分配方案基础上,给分配到0个钻石的人每人一个钻石,给分配到1个钻石的人中选择序号最小的给他2个钻石,其余的人都给0个钻石,这样的话,分到钻石的人都会觉得自己投赞成票比投反对票有利
- 当总人数是3时,特别考虑:给第二个人1颗钻石,第三个人0颗钻石。因为轮到第二个人分配时,第三个人肯定投反对票,这样他就会得到所有钻石,所以只要给第二个人1颗钻石,他就肯定会投赞成票
上面的问题可以很简单的用递归来解决,如果只需要求第一个人的钻石数目,从以下的分配方案中可以发现有更简单的规律:第一个人的钻石数目是:D - P/2 - 1(其中D是钻石总数目,除法向下取整,P = 3时特别考虑)
P=3: D-1 1 0
P=4: D-3 0 2 1
P=5: D-3 0 1 0 2
P=6: D-4 0 1 2 1 0
P=7: D-4 0 1 2 0 0 1
海盗分赃的详细分析可参考:here
该题的通过代码:
int main()
{
int D,P;
scanf("%d%d", &D, &P);
if(P == )printf("%d", D-);
else printf("%d",D-(P/+));
return ;
}
以下代码根据上面分析的递归算法可以打印出每个人分配到的钻石数目:
#include<cstdio>
#include<vector>
using namespace std; void haidao(int diamondNum, int personNum, int scheme[])
{
if(diamondNum < personNum)return;
if(personNum == )
{
scheme[] = diamondNum - ;
scheme[] = ;
scheme[] = ;
}
else
{
int nextScheme[personNum];
haidao(diamondNum, personNum-, nextScheme);
scheme[] = ;
bool flag = false;
int giveOut = ;
for(int i = ; i < personNum; i++)
{
if(nextScheme[i-] == )
{
scheme[i] = ;
giveOut++;
}
else if(nextScheme[i-] == && flag == false)
{
scheme[i] = ;
flag = true;
giveOut += ;
}
else scheme[i] = ;
}
scheme[] = diamondNum - giveOut;
}
} int main()
{
int D,P;
scanf("%d%d", &D, &P);
int scheme[P];
haidao(D, P, scheme);
for(int i = ; i < P; i++)
printf("%d", scheme[]);
}
#include<cstdio>
#include<vector>
using namespace std; int main()
{
vector<int> list1,list2;
int tmp;
do
{
scanf("%d", &tmp);
list1.push_back(tmp);
}while(tmp != -);
do
{
scanf("%d", &tmp);
list2.push_back(tmp);
}while(tmp != -);
if(list1.size() == && list2.size() == )
{printf("NULL\n"); return ;}
int i = , j = ;
while(list1[i] != - && list2[j] != -)
{
if(list1[i] <= list2[j])
printf("%d ", list1[i++]);
else printf("%d ", list2[j++]);
}
if(list1[i] == -)
{
for(; j <= list2.size()-; j++)
printf("%d ", list2[j]);
printf("%d\n", list2[j]);
}
if(list2[j] == -)
{
for(; i <= list1.size()-; i++)
printf("%d ", list1[i]);
printf("%d\n", list1[i]);
}
}
include<cstdio>
#include<vector>
using namespace std;
int main()
{
vector<int> list1,list2;
int tmp;
do
{
scanf("%d", &tmp);
list1.push_back(tmp);
}while(tmp != -);
do
{
scanf("%d", &tmp);
list2.push_back(tmp);
}while(tmp != -);
int i = , j = ;
bool isFirst = true;
while(list1[i] != - && list2[j] != -)
{
if(list1[i] == list2[j])
{
if(isFirst == false)
printf(" ");
isFirst = false;
printf("%d", list1[i]);
i++; j++;
}
else if(list1[i] < list2[j])i++;
else j++;
}
if(isFirst == true)printf("NULL");
return ;
}
#include<cstdio> int main()
{
int n;
scanf("%d", &n);
int arr1[n], arr2[n];
for(int i = ; i < n; i++)
scanf("%d", &arr1[i]);
for(int i = ; i < n; i++)
scanf("%d", &arr2[i]);
int k = , i = , j = ;
while()
{
if(arr1[i] < arr2[j])
{
if(k == n)
{printf("%d", arr1[i]); return ;}
i++;
}
else
{
if(k == n)
{printf("%d", arr2[j]); return ;}
j++;
}
k++;
}
return ;
}
【版权声明】转载请注明出处:http://www.cnblogs.com/TenosDoIt/p/3413053.html
PAT《数据结构学习与实验指导》实验项目集 2-09 2-10 2-11 2-12 2-13的更多相关文章
- [团队项目]第二个冲刺 看板和燃尽图 Sprint2 6.8/6.9/6.10/6.11/6.12/6.13/6.14
1.开始一个新的冲刺: 起止:2016.6.1~2016.6.14 按照以下过程进行 ProductBacklog:继续向下细化 Sprint 计划会议:确定此次冲刺要完成的目标 Sprint Bac ...
- 零基础学习云计算及大数据DBA集群架构师【预科2015年12月14日周一】
1.第一天比较轻松,上午填表格,录指纹,拍照片,做自我介绍. 2.下午老师简单介绍了一下PC\交换机\路由器\塔式服务器\机架式服务器(1U\2U)\刀片服务器\磁带机 3.班主任陈老师朱老师,预科秦 ...
- Maven学习3-使用Maven构建项目
转自:http://www.cnblogs.com/xdp-gacl/p/4240930.html maven作为一个高度自动化构建工具,本身提供了构建项目的功能,下面就来体验一下使用maven构建项 ...
- 编译原理LR(0)项目集规范族的构造详解
转载于https://blog.csdn.net/johan_joe_king/article/details/79051993#comments 学编译原理的时候,感觉什么LL(1).LR(0).S ...
- 201871030125-王芬 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
实验三 软件工程结对项目 项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs ...
- 201871030114-蒋鑫 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客链接☛ 班级博客 这个作业要求链接☛ 作业要求 我的课程学习目标☛ 1. 体验软件项目开发中的两人合作,练习结对编程(Pair programming).2. 掌握Github ...
- 201871030134-余宝鹏 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 1.体验软件项目开发中的两人合作,练习结对编程(Pair programming) 2.掌握GitHub协作开发程 ...
- 201871030102_崔红梅 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 1.体验软件项目开发中的两人合作,练习结对编程2. 掌握Github协作开发程序的操作方法.3.阅读<现代软 ...
- 201871010130-周学铭 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客链接 18卓越班 这个作业要求链接 实验三结对编程要求 我的课程学习目标 体验软件项目开发中的两人合作,练习结对编程(Pair programming).掌握Github协作开 ...
- 201871030139-于泽浩 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
201871030139-于泽浩 实验三 结对项目-<D{0-1}KP 实例数据集算法实验平台>项目报告 项目 内容 课程班级博客链接 2018级卓越班 这个作业要求链接 软件工程结对项目 ...
随机推荐
- .NET中常见的内存泄漏和解决办法
在.NET中,虽然CLR的GC垃圾回收器帮我们自动回收托管堆对象,释放内存,最大程度避免了"内存泄漏"(应用程序所占用的内存没有得到及时释放),但.NET应用程序"内存泄 ...
- 解决iframe加载的内容有时显示有时不显示
在ASP.NET MVC项目中遇到了这样的一个问题,假设父页面有一个iframe <iframe id=" width="100%" height="10 ...
- 在ASP.NET MVC中使用jQuery的Load方法加载静态页面的一个注意点
使用使用jQuery的Load方法可以加载静态页面,本篇就在ASP.NET MVC下实现. Model先行: public class Article { public int Id { get; s ...
- Delphi的自动编译软件Want
Delphi自动编译环境的搭建及使用 什么是Want Want是一套Windows下用于编译Delphi源代码的工具.Want的名称是Windows Ant的意思. Ant是Java下最著名的自动编译 ...
- Android 实时视频编码—H.264硬编码
from://http://www.cnblogs.com/skyseraph/archive/2012/04/04/2431771.html 1 硬编码 & 软编码 硬编码:通过调用And ...
- 权力的游戏第一季/全集Game of Thrones迅雷下载
<权力的游戏>是一部中世纪史诗奇幻题材的电视连续剧,该剧以美国作家乔治·R·R·马丁的奇幻巨作<冰与火之歌>七部曲为基础改编创作. 故事背景中虚构的世界,分为两片大陆:位于西面 ...
- 一分钟了解ArrayList和Vector的区别
一.是否是线程安全的 Vector是同步的, 而ArrayList不是.因为Vector是同步的, 所以它是线程安全的.同样, 因为Vecotr是同步的, 所以他需要额外的开销来维持同步锁, 所以它要 ...
- 使用强大的 Mockito 测试框架来测试你的代码
原文链接 : Unit tests with Mockito - Tutorial 译文出自 : 掘金翻译计划 译者 : edvardhua 校对者: hackerkevin, futureshine ...
- ASP.NET Core 中间件 中间件(Middleware)和过滤器(Filter)的区别
https://www.cnblogs.com/savorboard/p/5586229.html 前言 在上篇文章主要介绍了DotNetCore项目状况,本篇文章是我们在开发自己的项目中实际使用的, ...
- Java switch 枚举
Switch中能够使用int.byte.short,char,Enum,String.当中Enum为1.5之后新增特性,String为java8新增特性.本文介绍怎样在Switch中使用Enum类型. ...