公式解析

公式解析

时间: 1ms        内存:128M

描述:

在某些应用中,为了支持灵活性,往往用到自定义的公式。
比如,有如下的原始公式集合:
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

提示:

参考答案(内存最优[760]):

#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 %d\n",x,y);
        }
    }
    return 0;
}

参考答案(时间最优[0]):

#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 %d\n",x,y);
        }
    }
    return 0;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注