pat 2-09 装箱问题模拟

 #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 ;
}

pat 2-10 海盗分赃

这是一道智力推理题,假设有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[]);
}

pat 2-11两个有序链表序列的合并

 #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]);
}
}

pat 2-12 两个有序链表序列的交集

 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 ;
}

pat 2-13 两个有序序列的中位数

 #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的更多相关文章

  1. [团队项目]第二个冲刺 看板和燃尽图 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 ...

  2. 零基础学习云计算及大数据DBA集群架构师【预科2015年12月14日周一】

    1.第一天比较轻松,上午填表格,录指纹,拍照片,做自我介绍. 2.下午老师简单介绍了一下PC\交换机\路由器\塔式服务器\机架式服务器(1U\2U)\刀片服务器\磁带机 3.班主任陈老师朱老师,预科秦 ...

  3. Maven学习3-使用Maven构建项目

    转自:http://www.cnblogs.com/xdp-gacl/p/4240930.html maven作为一个高度自动化构建工具,本身提供了构建项目的功能,下面就来体验一下使用maven构建项 ...

  4. 编译原理LR(0)项目集规范族的构造详解

    转载于https://blog.csdn.net/johan_joe_king/article/details/79051993#comments 学编译原理的时候,感觉什么LL(1).LR(0).S ...

  5. 【StatLearn】统计学习中knn算法实验(2)

    接着统计学习中knn算法实验(1)的内容 Problem: Explore the data before classification using summary statistics or vis ...

  6. web实验指导书和课后习题参考答案

    实验指导书 :http://course.baidu.com/view/daf55bd026fff705cc170add.html 课后习题参考答案:http://wenku.baidu.com/li ...

  7. lingo运筹学上机实验指导

    <运筹学上机实验指导>分为两个部分,第一部分12学时,是与运筹学理论课上机同步配套的4个实验(线性规划.灵敏度分析.运输问题与指派问题.最短路问题和背包问题)的Excel.LONGO和LI ...

  8. Arduino学习笔记⑤ 模拟IO实验

    1.前言     还记得前几个我们都是在讲解数字IO,而其实我们生活中大多数信号都是模拟信号,如声音以及温度变化.在Arduino中,常用0~5v的电压来表示模拟信号. 1.1 模拟输入功能      ...

  9. Arduino学习笔记④ 经典按键实验

    1.前言     我们讲了数字IO口介绍以及做了流水灯演示(主要用到IO口的输出功能),这节课我们讲解一下IO口的输入功能,说到输入功能,最经典的例子莫过于按键实验.废话少说,赶紧上车. 2.实验材料 ...

  10. ICS2019-Linux汇编实验指导

    ICS2019-Linux汇编实验指导 环境配好了? 开始调试 一. 首先安装NASM 1. 先判断系统是否已经安装了nasm 打开终端,执行  whereis nasm :如果显示nasm: /us ...

随机推荐

  1. mybatis 与 xml

    mybatis的两大重要组件:配置和映射文件,都是可以通过xml配置的(新版本新增了注解的方式配置Mapper),下面来解析下mybatis是怎么做的 其中,关于配置文件解析的主要是在这个类XMLCo ...

  2. Zookeeper的基础知识

    1.Zookeeper是什么? 引用官方的说法:“Zookeeper是一个高性能,分布式的,开源分布式应用协调服务.它提供了简单原始的功能,分布式应用可以基于它实现更高级 的服务.它被设计为易于编程, ...

  3. 使用phpmaill发送邮件的例子

    首先,要下载php_mail软件包 核心代码: index.php <?php include "mail.php"; if (!empty($_POST['to']) &a ...

  4. Zend Studio 10正式版破解(2013-02-26更新)

    Zend Studio 10正式版注册破解(2013-02-26完成更新) 1.以下方法仅供技术交流学习,请勿非法使用,如长期使用请支持购买正版. 2.若你还没有最新安装程序? ZendStudio ...

  5. 在Azure Container Service创建Kubernetes(k8s)群集运行ASP.NET Core跨平台应用程序

    引子 在此前的一篇文章中,我介绍了如何在本地docker环境中运行ASP.NET Core跨平台应用程序(http://www.cnblogs.com/chenxizhang/p/7148657.ht ...

  6. 使用schemaExport自动生成表结构

    一.Hibernate原生状态 ? 1 2 3 4 5 Configuration cfg = new Configuration().configure();   SchemaExport expo ...

  7. Codeforces 1096F(dp + 树状数组)

    题目链接 题意: 对于长度为$n$的排列,在已知一些位的前提下求逆序对的期望 思路: 将答案分为$3$部分 $1.$$-1$与$-1$之间对答案的贡献.由于逆序对考虑的是数字之间的大小关系,故假设$- ...

  8. Django中的ORM介绍,字段以及字段的参数。

    Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据 ...

  9. Youtube高清视频下载的3种方法

    经常看视频的朋友都听说或使用过youtube,  它是一个综合性的视频网站,包含的内容多种多样,能满足不同的人的需求,最要的是广告少,资源良心,不像有些网站,动不动就是1分种以上的长广告.有些因为工作 ...

  10. 关于Unity启动时间过长(启动黑屏时间长)的问题!!! 牛逼... 思路不错...

    http://blog.csdn.net/u012169685/article/details/52068809