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级卓越班 这个作业要求链接 软件工程结对项目 ...
随机推荐
- 通过进程ID获取基地址
下面代码是通过进程ID来获取进程的基地址,创建一个进程快照后,读取进程模块,一般情况下第一个模块就是进程的基地址,下面的程序通过模块的字符串匹配来找到基地址.通过MODULEENTRY32来读取,下面 ...
- Snail—UI学习之得到某组件的方法
第一种方法:依据传入函数的參数对象的tag属性区分 比方 多个button运行同一个方法,可是不同的方法运行时.里面的逻辑又不一样 那就得加以区分 这时能够用tag来差别 //再新建一个Button ...
- java.lang.IllegalStateException: The remote endpoint was in state [TEXT_FULL_WRITING] which is an invalid state for called method 解决办法
java.lang.IllegalStateException: The remote endpoint was in state [TEXT_FULL_WRITING] which is an in ...
- 用开源项目JazzyViewPager实现ViewPager切换动画
JazzyViewPager这个项目可以让viewpager有各种绚丽的动画,而且还可以自由扩展.但从官网下载的lib导入时会出现找不到视图的问题,不知道是不是我人品不行,所以我就自己写了lib.总之 ...
- 用开源项目FlipImageView实现图片的翻转效果
开源项目地址:https://github.com/castorflex/FlipImageView 本实例我没做什么改动,就是添加了注释,方便大家阅读.和之前一样,导入library和工程 ...
- 深入分析Java的编译原理
在<Java代码的编译与反编译>中,有过关于Java语言的编译和反编译的介绍.我们可以通过javac命令将Java程序的源代码编译成Java字节码,即我们常说的class文件.这是我们通常 ...
- 从阿里Java开发手册学习线程池的正确创建方法
前言 最近看阿里的 Java开发手册,上面有线程池的一个建议: [强制]线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这样的处理方式让写的同学更 ...
- Lp空间
在数学中,Lp空间是由p次可积函数组成的空间:对应的ℓp空间是由p次可和序列组成的空间.它们有时叫做勒贝格空间,以昂利·勒贝格命名(Dunford & Schwartz 1958,III.3) ...
- 层次聚类 Hierarchical Clustering
-------------------------------- 不管是GMM,还是k-means,都面临一个问题,就是k的个数如何选取?比如在bag-of-words模型中,用k-means训练码书 ...
- 微信Access Token 缓存方法
微信Access Token默认缓存是2小时,但是需要特别强调,微信服务号和微信企业号缓存并不相同. (1)微信公众号号:每次Http请求Access Token 系统会返回不同的Token,并附带超 ...