Advertisement

溶液模拟器

阅读量:

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

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

复制代码
    //输入——(如下) 
    //1行原始溶液   浓度
    //3行往原始溶液中加入了  x溶剂 浓度的溶液  
    //z 表示撤销为上一步 
    //输出——(如下)
    //1.原V+现在的V    , (原V*浓度+浓度)/ 现在的体积+原来的体积 
    #include<cstdio>
    #include<iostream>
    #include<cstring>
    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♪(・ω・)ノ
最后赞一个 吧!!!

全部评论 (0)

还没有任何评论哟~