题目描述
在某些应用中,为了支持灵活性,往往用到自定义的公式。
比如,有如下的原始公式集合:
int add(int x, int y): 返回x与y的和
int add(int x, int y, int z): 返回x,y,z三个数的和
int min(int x, int y): 返回x,y中较小的值
int max(int x, int y): 返回x,y中较大的值
int doubleMe(int x): 返回 x 的2倍
给出一个自定义公式串
add(min(5,3),max(2,8),add(1,doubleMe(1)))
通过手工计算可以得出结果为:14
本题的任务是:编写一个解析程序,能够对由上述原始公式任意组合出来的公式计算其结果。也就是输入一个自定义公式串,输出它的计算结果(可以不考虑输入公式本身有语法错误的情况)。
输入的公式串中可以含有多余的空格,类似:
add( min(5, 3) , max(2 , 8) ) 也是合法的公式。
输入
暂无
输出
暂无
样例输入
doubleMe(doubleMe(doubleMe(1)))
样例输出
8
参考代码
#include<stdio.h>
#include<math.h>
int main()
{
int n,s,x,y,k,m;
while(scanf("%d",&m)!=EOF)
{
if(!m)
break; else
{
k=(int)sqrt(m);
n=m-k*k;
s=k+1;
if(m==1||m==9||m==25)
{
x=1;
y=k;
} else
if(m==4||m==16)
{
x=k;
y=1;
} else
if(m>=2&&m<=3||m>=10&&m<=15)
{
if(n<=s)
{
y=s;
x=n;
} else
{
y=2*s-n;
x=s;
}
} else
if(m>=5&&m<=8||m>=17&&m<=24)
{
if(n>s)
{
x=2*s-n;
y=s;
} else
{
x=s;
y=n;
}
}
printf("%d %dn",x,y);
}
}
return 0;
}
解析
暂无