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级卓越班 这个作业要求链接 软件工程结对项目 ...
随机推荐
- indy10的idhttpServer应答字符串
indy10的idhttpServer应答字符串 先看应答字符串的代码: procedure TIdIOHandler.Write(const AOut: string; AByteEncoding: ...
- 微信破解,解密?How To Decrypt WeChat EnMicroMsg.db Database?
20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送) 国内私募机构九鼎控股打造,九鼎投资是在全国股 ...
- asp.net mvc5 安装
原文地址 http://docs.nuget.org/docs/start-here/using-the-package-manager-console 工具-->NuGet程序包管理器--&g ...
- linux批量改名
rename 's/abc/xyz/' * 把包含abc的文件名,替换为xyz
- 【转】Android思维导图
转自:http://www.open-open.com/lib/view/open1421201191375.html
- Orchard 之:Widget,兼看 Layer 在权限控制中的作用
一:Widget 可以理解为控件,可以直接被页面所引用.行为类似与分部页面,比如,我们可以创建一个 商品列表 Widget,然后这个 Widget 就可以被很多页面所引用. 理解 Widget 这个概 ...
- diff详解
作者: 阮一峰 日期: 2012年8月29日 diff是Unix系统的一个很重要的工具程序. 它用来比较两个文本文件的差异,是代码版本管理的基石之一.你在命令行下,输入: $ diff <变动前 ...
- hive php连接查询
baidu hive php PHP连接Hive执行sql查询 php通过 thrift访问hadoop的hive php开发Hive Web查询 php连接hive执行sql查询 利用python将 ...
- CSS 强制换行和禁止换行强制换行 和禁止换行样式
强制换行 1.word-break: break-all; 只对英文起作用,以字母作为换行依据. 2.word-wrap: break-word; 只对英文起作用,以单词作为换行依据. ...
- Java NIO和IO的区别(转)
原文链接:Java NIO和IO的区别 下表总结了Java NIO和IO之间的主要差别,我会更详细地描述表中每部分的差异. 复制代码代码如下: IO NIO面向流 ...