标签:数学
| input | output |
|---|---|
p = 1 n = 1 V = 1 |
T = 0.120279 |
高中学的:pV=nRT,即理想气体状态方程
题意:知道三个变量求剩下一个变量。其中R是已知常量=8.314。其中V,T必须要大于0。如果出现矛盾就输出error。如果出现不确定的情况输出undefined。
分类:以求V为例子。如果p和n 有只一个为0 那T和V中也必须有个是等于0的。所以和题意矛盾。输出error。 如果p,n同时为0,那么就无法求出V是多少。输出undefined。 其他情况直接计算即可。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
#include <vector>
int main()
{
int data[5];
char p[3];
string tem;
int flag=1;
memset(data,-1,sizeof data);
for(int i=0;i<3;i++)
{
int num;
cin>>p[i];
cin>>tem;
cin>>num;
if(p[i]=='p')
data[0]=num;
if(p[i]=='V')
data[1]=num;
if(p[i]=='n')
data[2]=num;
if(p[i]=='T')
data[3]=num;
}
if(data[1]==0||data[3]==0)
{
puts("error");
return 0;
}
int wei;
for(int i=0;i<4;i++)//找出未知数
{
if(data[i]==-1)
wei=i;
}
double r=8.314;
if(wei==0)//计算p data[1]不会等于0 所以不用多做考虑
{
printf("p = %lf\n",r*(data[2]*data[3])/data[1]);
}
else if(wei==1)//计算V
{
if(data[0]==0&&data[2]==0)//如果等式上下都是0 那么就是无法确定,
puts("undefined");
else if(data[0]==0||data[2]==0)//如果p等于0 n不等于0 那T必须是0 矛盾。反之,V不能是0 也矛盾
puts("error");
else
printf("V = %lf\n",r*(data[2]*data[3])/data[0]);
}
else if(wei==2)//计算n
{
printf("n = %lf\n",1.0*(data[0]*data[1])/data[3]/r);
}
else if(wei==3)//计算T
{
if(data[0]==0&&data[2]==0) //如wei==1
puts("undefined");
else if(data[0]==0||data[2]==0)
puts("error");
else
printf("T = %lf\n",1.0*(data[0]*data[1])/data[2]/r);
}
return 0;
}
/*
T = 1
n = 0
p = 0
*/标签:数学
原文地址:http://blog.csdn.net/u013532224/article/details/44279639