溶液模拟器

写代码ing
O(∩_∩)O哈哈~
这题很烧脑 啊啊啊啊

解题步骤已在代码的注释里面——······

//输入——(如下) 
//1行原始溶液   浓度
//3行往原始溶液中加入了  x溶剂 浓度的溶液  
//z 表示撤销为上一步 
//输出——(如下)
//1.原V+现在的V    , (原V*浓度+浓度)/ 现在的体积+原来的体积 
#include
#include
#include
using namespace std;

#define N 10010   //题目:第二行一个整数n,表示操作数,n≤10000;
//创造“栈 ” 
struct node{
	int v;//体积
	double c;//容积 
}a[N];//内容,容量,全局 

int main(void)
{
	int v,c,n,top=1;//体积,浓度,操作数, 栈顶(要赋初始值) 
	cin>>v>>c>>n;//获取,要按顺序
	a[top].v=v;//原始溶液的体积
	a[top].c=c;//原始溶液的浓度 
	while(n--){//n--,n减到0,while结束 
		char ch;//char 获取的是P和Z
		cin>>ch;
		//改变栈顶位置 , 回退(相当于出栈) 
		if(ch=='Z'&&top>1){//top等于1,再减等于0,不可以 
			top--; 
		}
		
		//进栈(压栈) 
		if(ch=='P'){//注意有两个等号 
			cin>>v>>c;//变成新的v和c 
			top++;//开始压(入)栈
			a[top].v=a[top-1].v+v; //获取(“酒”)当前体积 //a[top-1].v是上一个(原来的)栈顶的v,加上现在的v 
			a[top].c=(a[top-1].v*a[top-1].c+v*c)/(double)a[top].v;//v*c是新获取的v和c,doule强制类型转换 
		}
		printf("%d %.5lf\n",a[top].v,a[top].c);//每一次不管是压栈还是出栈都输出,输出要加换行符 
	}
	return 0;
}

请各位大佬多多指教哦!!!
Thanks♪(・ω・)ノ
最后赞一个吧!!!

你可能感兴趣的:(课课通,c++,栈)