C++趣味实验之:模拟产品的销售

前言

前几期,我们已经通过程序模拟了公司的扩大再生产和赚取剩余价值

现在,我们将要具体模拟公司生产产品交易的部分

以往的程序对价值的衡量是抽象的,而现在,程序在运作中新增了“单位”的概念,也就是说,程序的运算更加的标准合理了

(图片来源于网络,侵删)

设计过程

还是和以往一样,我们需要借助结构体模拟出两家企业

struct com{
	int add;//总财富
	int n;//n为其每份赚取的价值
	int sel;//销售量
	int ini=1;//选择成本的价格
	int prn;//产量
	
}c1,c2;

由于主要侧重销售,就省略了雇佣部分

设置完这些后,我们就要开始构造其基本逻辑了

                                                                        (原理配图)

void f1(int x,int y,int z1)//x为一份的生产成本,y为其产生的新价值
{
	int z=x/2*3;
	y=x+rand()%z;
	y=y-x;
	z1=z1+y;
}

物品在经过加工后售出,成为商品,其赚取的价值需要扣除其成本

除了交易,我们还需要设定产品产量,若商品亏损则减产,盈利则增产

void f2(int y2,int z2,int w2)//
{
	double prod;
	int ad=500;
		prod=rand()%ad;//增产
		prod=prod/100;
		while(ad*z2>=w2*70/100&&ad>10)
		{
			ad--;
		}
		y2=y2*prod;	
	cout<<"产量为"<<y2;
		
	
	
}

除了增产,商品还应该自我迭代,也就是说,当商品的销售情况到一定程度时,它可以改变其成本,通过成本与销售量这两个变量,运营即可自我调整

但是,如何销售呢?

购买力是市场的关键组成部分,所以,我们需要模拟出一个市场中的购买力

购买力是各不相同的,我们将购买者分为三个部分,为低、中、高收入人群

其总占比分别为,1/2,3/1,1/6

这三类人群的总财产分别设定为 5 10 15

每回合收入分别为 1 2 3

cin>>pop;
	int buy[pop];
	bool buy1[pop]={0};
	int may=0;
	int a1,a2,a3;
	for(int i=1;i<=pop/2;i++)
	{
		buy[i]=5;
	}
	for(int i=pop/2;i<=pop/2+pop/3;i++)
	{
		buy[i]=10;
	}
	for(int i=pop/2+pop/3;i<=pop;i++)
	{
		buy[i]=15;
	}

(按照比例赋值其初始资产)

for(int i=1;i<=pop/2;i++)
		{
			buy[i]=buy[i]+1;
		}
		for(int i=pop/2;i<=pop/2+pop/3;i++)
		{
			buy[i]=buy[i]+2;
		}
		for(int i=pop/2+pop/3;i<=pop;i++)
		{
			buy[i]=buy[i]+3;
		}	

每回合的收入与花费可以对商品生产进行调节,从而反映出购买力的膨胀与萎缩,促进整个程序的运行

资金充足,则商品增产、增加质量

资金匮乏,则商品淤积,企业开始减产

企业怎么以此进行其运营呢?

这时,我们就需要DFS函数

通过dfs统计收入变更、设计不同的销售方案

void dfs(int dep,int x4,int y4,int z4,int w4)
{
	if(dep>pop)
	{
		
	}
	else{
		if(w4>10)
		{
			x4++;
		}
		else if(10>w4&&w4>5)
		{
			y4++;
		}
		else if(w4<5)
		{
			z4++;
		}
		dfs(dep+1,x4,y4,z4,w4);
	}
}

先以统计收入人群为例

我们统计了资金在10以上,5与10之间和低于5的人群人数

这个操作的目的,是为了让企业估算其获利的最大值,从而判断其应该改变生产数目还是改变产品质量

void f5(int x5,int y5,int z5,int w51,int w52,int v51,int v52,int num,int num2,int prn,int add)//f5(a1,a2,a3,c1.ini,c2.ini,c1.n,c2.n,cph1,cph2,c1.prn,c1.add);
{
	if((w51+1)*prn<add)
	{
		if(w51>w52)
		{
			num=x5*v51;
			num=num+y5*v51/2;
			num=num+y5*v52/2;
			num=num+z5*v52;
		}
		else{
			num=x5*v52;
			num=num+y5*v51/2;
			num=num+y5*v52/2;
			num=num+z5*v51;
		}	
	}
	
	double prod2;
	int ad2=500;
	prod2=rand()%ad2;//增产
	prod2=prod2/100;
	while(ad2*v51>=add*70/100&&ad2>10)
	{
		ad2--;
	}
	num2=num2*prod2;	
	if(num>num2)
	{
		tt=1;
	}
	else{
		w51=w51+1;
		cout<<"成本改为"<<w51;
	}
	
}

程序通过对比收入选择最优项

f1(c1.ini,c1.n,c1.add);
		for(int i=1;i<=pop;i++)
		{
			f3(buy[i],buy1,c1.ini,c2.ini,c1.n,c2.n,i4,c1.prn);	
		}
		dfs(may,a1,a2,a3,buy[may]);
		f5(a1,a2,a3,c1.ini,c2.ini,c1.n,c2.n,cph1,cph2,c1.prn,c1.add);
		if(tt==1)
		{
			f2(c1.prn,c1.ini,c1.add);	
		}
		

(简单调用如上图所示)

完成了这些工作,我们就可以利用其开始交易了

void f3(int x3,bool y3,int z31,int z32,int w31,int w32,int ii,int sel)//
{
	if(sel>0&&y3==0)
	{
		if(x3>10)
	 {
		if(z31>z32)
		{
			x3=x3-w31;
			use(y3,ii);
			sel=sel-1;
		}
		else
		{
			x3=x3-w32;
			use(y3,ii);
			sel=sel-1;
		}
	 }
		else if(10>x3&&x3>5)
		{
			if(z31>z32)
			{
				x3=x3-w31;
				use(y3,ii);
				sel=sel-1;
			}
			else
			{
				x3=x3-w32;
				use(y3,ii);
				sel=sel-1;
			}
		}
		else if(x3<5)
		{
			if(w31>w32)
			{
				x3=x3-w32;
				use(y3,ii);
				sel=sel-1;
			}
			else
			{
				x3=x3-w31;
				use(y3,ii);
				sel=sel-1;
			}
		}	
	}
	
}

不同收入的人群有不同的选择,从而左右企业的发展方向,起到调控作用

并且,一个回合的产品不可以重复购买

结尾

程序的设计就到这里,感谢您的阅读

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值