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级卓越班 这个作业要求链接 软件工程结对项目 ...
随机推荐
- 在ASP.NET MVC中使用Knockout实践02,组合View Model成员、Select绑定、通过构造器创建View Model,扩展View Model方法
本篇体验使用ko.computed(fn)计算.组合View Model成员.Select元素的绑定.使用构造器创建View Model.通过View Model的原型(Prototype)为View ...
- javascript中的回调函数(callback)
代码如下: app.use(function(req, res, next) { var err = new Error('Not Found'); err.status = 404; ...
- DirectInfo.GetFiles返回数组的默认排序
NTFS和CDFS下,是按照字母顺序,而FAT下,按照文件创建时间顺序 using System; using System.Collections; using System.IO; namespa ...
- mount.nfs: access denied by server while mounting <SERVER IP>:<SERVER PATH>
root@hipchat:~# mount -t nfs 192.168.10.220:/hipchat/share /home/share/nfs mount.nfs: access denied ...
- cvCreateStumpClassifier
CV_BOOST_IMPL CvClassifier* cvCreateStumpClassifier( CvMat* trainData, //训练样本的数据,包含图像大小.数量,类别,权重等 in ...
- HDR和bloom效果的区别和关系
什么是HDR? 谈论游戏画面时常说的HDR到底是什么呢?HDR,本身是High-Dynamic Range(高动态范围)的缩写,这本来是一个CG概念.HDR的含义,简单说,就是超越普通的 ...
- java高分局之jstat命令使用(转)
转自:http://blog.csdn.net/h_025/article/details/52813817 java高分局之jstat命令使用 jstat命令可以查看堆内存各部分的使用量,以及加载类 ...
- iTunes Connect开发者指南中的一个疑问
iTunes Connect Developer Guide 避免app版本出现在iClound中,我的疑问是对已经上架的版本不能设置,那么这个功能的真正意义在哪里? 大部分用户去应用页面下载 ...
- Asp.Net Core获取当前上下文对象
HttpContext简介 .Net Core中的HttpContext上下文是个抽象类,命名空间为Microsoft.AspNetCore.Http 所在程序集 \netstandard2.0\Mi ...
- 突发奇想-取缔宏定义,用另外一种语言来做C++的部分外层封装
突发奇想:用一种语言 来编写C++外挂,可以替代宏定义,可以这么做,在C++里面加入特定标签,比如<javascript></javascript>中间的代码可以翻译成C++代 ...