当前位置: 首页 > article >正文

买饮料问题

问题描述:1元可买一瓶饮料,俩个空瓶可换一瓶饮料,编程计算n元可喝几瓶饮料

法一

n元至少可买n平饮料,产生n个空瓶,然后用空瓶换饮料

n个空瓶可换n/2瓶饮料,产生n/2个空瓶,那此时的空瓶数是n/2吗?不一定,当n为奇数时,哈药加上多出来的不足以换饮料的那一瓶。

一直换一直换,直到空瓶数<=1.

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int fun(int money)
{
	int total = money;//最初可喝的饮料
	int empty = money;//最初可产生的空瓶
	while (empty > 1)//证明空瓶可以换饮料
	{
		total = total + empty / 2;
		empty = empty / 2 + empty % 2;
	}
	return total;
}
int main()
{
	int money;
	scanf("%d", &money);
	int total = fun(money);
	printf("%d", total);
	return 0;
}

法二:找规律发现是2*money-1

所以可写为

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int fun(int money)
{
	int total;
    total=2*money-1;
	return total;
}
int main()
{
	int money;
	scanf("%d", &money);
	int total = fun(money);
	printf("%d", total);
	return 0;
}

法三:递归

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int fun(int empty)
{
	if (empty > 1)
	{
		int i = empty / 2;//产生的空瓶又能买这么多饮料
		int j = empty % 2 + empty / 2;//喝完之后又产生这么多空瓶
		return i + fun(j);
	}
	else
		return 0;
}
int main()
{
	int money;
	scanf("%d", &money);
	int empty = money;//最初产生了这么多空瓶
	int total = money+fun(empty);//fun用来计算这些空瓶可以再喝多少饮料
	printf("%d", total);
	return 0;
}


http://www.kler.cn/a/146776.html

相关文章:

  • C++设计模式:抽象工厂模式(风格切换案例)
  • 如何通过统计来反映工业新产业发展情况
  • 【青牛科技】视频监控器应用
  • 【电子设计】按键LED控制与FreeRTOS
  • 计算机网络-MSTP基础实验一(单域多实例)
  • 基于yolov8、yolov5的行人检测识别系统(含UI界面、训练好的模型、Python代码、数据集)
  • 【华为OD】B\C卷真题 100%通过:需要打开多少监控器 C/C++实现
  • java集合,ArrayList、LinkedList和Vector,多线程场景下如何使用 ArrayList
  • SQL Server:流程控制语言详解
  • leetcode 不同的二叉搜索树
  • java基础-运算符
  • virtualList 封装使用 虚拟列表 列表优化
  • 第四节HarmonyOS 熟知开发工具DevEco Studio
  • 深入解析:如何开发抖音票务小程序
  • CANdelaStudio 中 Bese Variant 和 Variant区别
  • JavaScript WebApi(二) 详解
  • Redis 命令处理过程
  • SIPp mac和debian用法可能略有差别
  • 【数据中台】开源项目(2)-Wormhole流式处理平台
  • 【0239】从编译原理角度理解 #include “xxx“ 或 #include<xxx> 的实现机制
  • 部署jekins遇到的问题
  • 初识Spring (Spring 核心与设计思想)
  • WEB渗透—反序列化(七)
  • 大数据-之LibrA数据库系统告警处理(ALM-37004 Datanode主备不同步或者断连)
  • CGAN原理讲解与源码
  • 机器人分类