大富翁问题

问题描述

我们来玩一个大富翁的游戏,在地图上有N个连续的城市,城市对某件商品的售价为[V1,V2,V3…VN],你作为未来的大富翁看到其中的商机,打起了倒卖商品赚取差价的主意。
约束条件:你只能顺序从第一个城市出发,不能走回头路,每次只能交易一件商品,再下次买入商品后必须卖掉之前买入的商品,求你能赚取的最大财富。比如:城市商品售价为[1,9,2,3,8],最大财富为(9-1)+(8-2)=14;城市商品售价为[9,8,3,2,1],最大财富为0,因为你买啥都无法赚钱。

问题分析

从给出的事例中可以分析出来从第一个城市开始买进后与第二个城市售价相比可能会有三种情况:
1.第二个城市售价低于第一个城市;
2.第二个城市高于第一个城市,并且后面没有比第二个城市售价高;
3.第二个城市高于第一个城市,但后面还有城市高于第二个城市;
综上所述主要是这三种情况。

算法实现

用一个数组存储所有城市的售价,一个str指针指向头,另一个ptr指针指向str的下一个,首先找到较小的数第一次买入,然后开始做对比。ptr的存的数如果小于str,ptr指向下一个;ptr存的数大于str,ptr与ptr+1做对比,如果ptr+1小于ptr,说明这时卖出最划算,然后计算收益。如果ptr+1大于ptr,ptr继续向后指,直到ptr大于ptr+1。每次计算完收益,str都指向ptr+1,从而开始计算下一次收益 。下一次受一开始时,str指向的数与str+1做对比,如果str+1小于str则当前str向后移指向str+1,依次向后做对比,直到str小于str+1,然后从下一个地址作为ptr的起点,开始选取ptr。算法如图:
ptr大于str直接算利润
ptr大于str直接算利润
继续开始下一次,先寻找较小的数作为str,买入

在这里插入图片描述
然后寻找较大的数作为ptr,ptr大于str,ptr与它的下一个地址中的值作比较。
在这里插入图片描述
直到ptr+1的值小于ptr,结束,计算利润。
在这里插入图片描述

c语言程序代码实现:

#include<stdio.h>
#include<stdlib.h>
int main()
{
	int num = 0;//城市个数
	int sell[100] = { 0 };//每个城市的售价
	int income = 0;//收入
	int *str = sell;//头指针
	int *ptr = str + 1;//尾指针
	scanf_s("%d", &num);
	for (int i = 0; i < num; i++)
	{
		scanf_s("%d", &sell[i]);
	}
	while (*str > *(str + 1))  //判断后面有没有比目前更小的数,有的话替换到较小的数买入,使利益最大化
	{
		str++;
		if (*str == 0)
		{
			break;
		}
	}
	ptr = str + 1;//更新 ptr
	while (ptr < (&sell[num]))
	{
		if (*ptr > *str)
		{
			while (*ptr < *(ptr + 1))  //判断后面有没有比目前更大的数,有的话替换
			{
				ptr++;
			}
			income = income + (*ptr - *str);
			str = ptr + 1;//开始计算下一次收益
			while (*str > *(str + 1))  //判断后面有没有比目前更小的数,有的话替换到较小的数买入,是利益最大化
			{
				str++;
				if (*str == 0)
				{
					break;
				}
			}
			ptr = str + 1;//每次计算完收益,两个指针均往后移动,以便计算开始计算下一次收益
		}
		else
		{
			ptr++;
		}
	}
	printf("%d\n", income);
	system("pause");
	return 0;
}

测试结果:
在这里插入图片描述
有不对的地方希望大家批评指正!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Scratch大富翁是一款基于Scratch编程软件开发的益智游戏。要制作一个Scratch大富翁游戏,需要考虑以下几个步骤。 首先,在Scratch中创建一个游戏场景,可以根据自己的喜好设计一个富饶的大富翁世界。 接下来,创建一个或多个角色,可以是玩家和电脑玩家。为角色添加行走、购买道具等动作,可以通过使用Scratch中的图形积木来实现。 然后,设计骰子投掷的逻辑。使用Scratch中的随机数生成器来模拟骰子的点数,并通过积木来移动角色的步数。 创建地图和房屋等资产,为游戏添加购买和升级的功能,可以通过积木的条件控制和变量的设置来实现。 添加事件触发,例如当玩家到达某个地方、踩到特定卡片等情况时触发相应的事件。可以通过使用条件判断和事件积木来实现。 最后,设置游戏的胜利条件和失败条件,例如谁先到达终点或者先破产等。可以根据自己的游戏规则和设定来进行调整。 最重要的是,为了让游戏更加有趣和吸引人,可以通过自定义音效、动画效果和背景音乐等来提升游戏的体验。 总结起来,要制作一个Scratch大富翁游戏,首先设计游戏场景、创建角色,然后添加骰子投掷逻辑和购买、升级等功能,接着设置事件触发和胜利条件,并且通过音效和动画效果来增加游戏的乐趣。希望你制作的Scratch大富翁游戏能够成功并且让人们享受其中的乐趣。 ### 回答2: Scratch大富翁是一款基于编程平台Scratch开发的游戏,下面我将向您介绍一些关键步骤来完成这个项目。 首先,我们需要创建一个虚拟地图。在Scratch中,可以使用不同的背景和角色来代表不同的地图区域。例如,可以使用不同颜色的方块作为地块,并通过自定义图标作为角色代表每个玩家。 接下来,我们需要为角色编写代码,以实现游戏规则和交互功能。使用Scratch的代码块来创建玩家行动,如掷骰子、前进特定步数、购买地块和收取过路费等。 在游戏中,还可以加入一些特殊事件和机会,如“命运卡片”或“道具卡片”,通过编写相应的代码块来触发和处理这些事件。 此外,还可以为游戏增加一些动画和音效来提升用户体验。例如,使用Scratch的音频块来添加背景音乐和音效,使用移动和旋转效果来使角色动起来。 最后,测试和完善游戏。在Scratch中,可以通过点击“运行”按钮来测试游戏的各个功能和交互是否正常。如果发现问题,可以调整和修复代码。 通过以上步骤,您可以完成Scratch大富翁的制作。在制作过程中,不仅可以提高自己的编程技能,还可以体验到游戏设计的乐趣。希望您能享受编程的过程,并创造出一个令人兴奋的游戏作品! ### 回答3: Scratch大富翁是一款基于Scratch平台的游戏,玩家通过策略、运气和决策来获得财富。以下是一些关于如何制作自己的Scratch大富翁游戏的步骤: 1. 设计游戏规则:确定游戏的目标、规则和玩法。确定每个玩家的起始资金、地图、房地产等元素。 2. 创建游戏地图:利用Scratch的画笔功能,设计游戏地图。你可以使用绘图工具绘制不同的地形、房屋、商店等地点。 3. 设计角色:为每个玩家创建角色,并为他们提供起始资金。还可以设计不同的特殊角色,如扔骰子的球员、银行家等。 4. 编写代码:使用Scratch的积木编程,编写游戏逻辑和规则。这包括移动角色、购买房产、支付租金等行为。 5. 创建随机事件:设计各种随机事件,如地块上发生灾害、获得奖励等。使用Scratch的条件和控制积木,为这些随机事件创建适当的反应。 6. 控制游戏流程:编写代码来控制游戏的流程,如玩家轮流掷骰子、移动角色、购买地产、支付租金等。 7. 添加音效和图像:使用Scratch提供的音效和图像库,为游戏增添声音和视觉效果。例如,在掷骰子时添加掷骰子的声音。 8. 测试和改进:测试你的游戏,并修复任何错误或不一致之处。增加更多的元素,如任务、特殊事件,以增加游戏的深度和趣味性。 制作Scratch大富翁游戏需要一定的编程知识和逻辑思维,但通过仔细的规划和实践,你可以创建一个有趣而富有挑战的游戏。祝你制作成功!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值