093.波瓦松的分酒趣题

简介: 093.波瓦松的分酒趣题
#include<stdio.h>
void getti(int a,int y,int z);
int i;           /*最后需要分出的重量*/
void main()
{
    int a,y,z;
    clrscr();
    puts("***************************************************************");
    puts("*  This program is to solve Problem of Poisson Beer Division. *");
    puts("* The Problem is as follows: Someone has a bottle of 12 pints *");
    puts("* beer. He wants to get 6 pints, but he does not has a bottle *");
    puts("* of 6 pints. He only has a bottle of 8 pints and a bottle of *");
    puts("* 5 pints. So how can he get 6 pints?                         *");
    puts("***************************************************************");
    printf(" >> Input Full bottle a,Empty b,c, and Get volumes:\n"); /*a 满瓶的容量  y:第一个空瓶的容量  z:第二个空瓶的容量*/
    printf(" >> ");
    scanf("%d%d%d%d",&a,&y,&z,&i);
    getti(a,y,z);           /*按a -> y -> z -> a的操作步骤*/
    /*getti(a,z,y);           /*按a -> z -> y -> a的步骤*/
    printf("\n Press any key to quit...");
    getch();
}
void getti(int a,int y,int z)   /*a:满瓶的容量  y:第一个空瓶的容量  z:第二个空瓶的容量*/
{
   int b=0,c=0,j=0;           /* b:第一瓶实际的重量  c:第二瓶实际的重量 j: 倒的步数*/
   puts(" >> The division steps are as follows.\n");
   printf(" Bottle:    a<%d> b<%d> c<%d>\n",a,y,z);
   printf("-----------------------------\n");
   printf(" Step No.|\n");
   printf("   <%d>   | %4d %4d %4d\n",j++,a,b,c);
   while(a!=i||b!=i&&c!=i)      /*当满瓶!=i或另两瓶都!=i*/
   {
      if(!b)
      {  a-=y; b=y;}    /*如果第一瓶为空,则将满瓶倒入第一瓶中*/
      else if(c==z)
      {  a+=z; c=0;}    /*如果第二瓶满,则将第二瓶倒入满瓶中*/
      else if(b>z-c)    /*如果第一瓶的重量>第二瓶的剩余空间*/
      { b-=(z-c);c=z;}    /*则将装满第二瓶,第一瓶中保留剩余部分*/
      else{ c+=b; b=0;}   /*否则,将第一瓶全部倒入第二瓶中*/
      printf("   <%d>   | %4d %4d %4d\n",j++,a,b,c);
   }
   printf("-----------------------------\n");
}
相关文章
|
存储 JavaScript 前端开发
盘点主流 Flutter 状态管理库2024
状态管理是每个应用不可缺少的,本文将会盘点下主流的状态管理包。
614 2
盘点主流 Flutter 状态管理库2024
|
Web App开发 JavaScript 前端开发
python实现QQ空间自动点赞功能
python实现QQ空间自动点赞功能
228 0
|
Ubuntu Java Linux
|
11月前
|
Web App开发 安全 网络协议
多域名 SSL 证书是什么? 多域名 SSL 证书申请流程
多域名SSL证书是保护多个网站时的高效选择,它使得单个证书能够保护多个域名(网站)。这种证书通过在用户的Web浏览器和托管网站的服务器之间建立安全的加密连接,确保了敏感信息(包括登录凭证、信用卡信息和其他个人数据)的安全传输。
837 1
|
安全 关系型数据库 MySQL
深入解析MySQL 8中的角色与用户管理
深入解析MySQL 8中的角色与用户管理
774 3
|
网络协议 Linux
linux学习之套接字通信
Linux中的套接字通信是网络编程的核心,允许多个进程通过网络交换数据。套接字提供跨网络通信能力,涵盖本地进程间通信及远程通信。主要基于TCP和UDP两种模型:TCP面向连接且可靠,适用于文件传输等高可靠性需求;UDP无连接且速度快,适合实时音视频通信等低延迟场景。通过创建、绑定、监听及读写操作,可以在Linux环境下轻松实现这两种通信模型。
295 1
|
jenkins 测试技术 持续交付
利用C++增强框架的可测试性(Testability)
**C++框架可测试性提升策略**:通过模块化设计、依赖注入、使用Mock对象和Stub、编写清晰接口及文档、断言与异常处理、分离测试代码与生产代码、自动化测试,可以有效增强C++框架的可测试性。这些方法有助于确保代码正确性、健壮性,提高可维护性和可扩展性。示例包括使用类和接口实现模块化,通过构造函数进行依赖注入,以及利用Google Test和Google Mock进行断言和模拟测试。
300 1
|
安全 应用服务中间件 网络安全
阿里云ssl证书简介和使用流程
了解如何在阿里云注册并实名账号,然后购买和部署SSL证书以增强网站安全性。阿里云SSL证书提供强大的加密、身份验证及SEO优势。通过简单流程购买适合的证书类型,如CFCA通配符OV证书,并在Nginx服务器上安装。遵循官方文档,下载证书,编辑Nginx配置并重启服务实现HTTPS。阿里云SSL证书是保障网站安全的高效解决方案。
956 2
阿里云ssl证书简介和使用流程
|
API 开发者
触发式邮件邮箱API发送邮件的方法和步骤
触发式邮件API如Aoksend让开发者能基于特定事件自动发送邮件。选择邮箱提供商(如Aoksend、Mailgun、AWS SES),注册并获取API密钥,设置权限和验证。编写代码调用API(示例代码提供),并在用户注册、订单处理等事件触发时发送邮件,提升效率和准确性。
|
监控
商标注册中重要的时间节点,你知道吗?
带您了解商标的一些重要的时间点
759 0
商标注册中重要的时间节点,你知道吗?