UVa 327 - Evaluating Simple C Expressions

传送门UVa 327 - Evaluating Simple C Expressions

虽然这题是在树的专题里面, 但是我看了半天还是找不到和树的联系.

只能用自己的方法做了.

如果路过的各位知道怎么用树的方法做, 求指点.....

题意挺简单, 就不说了.

我的思路就按题目里说的

1. 先扫描一遍, 干掉前缀, 干掉的同时对应的值++

2.再扫描一遍, 干掉后缀, 同时值--

3.计算值并输出.


我开了两个字符数组, 两个int数组.

int数组, 一个是用来计算值的时候用的, 另一个是最后输出各字母的值时候用的.

char数组, 一个用来存储原来的算式, 另一个为了计算.


详情见代码

#include <cstdio>
#include <cstring>
#include <cctype>
#include <vector>

using namespace std;

char in[200];
vector<char> temp;     //存储的是不带空格的数组.
int num[26];    //储存的是计算用值
int num2[26];   //储存输出用值
int number;
const char word[] = "abcdefghijklmnopqrstuvwxyz";

void Initial();
void EraseEmpty();
void ErasePrefix();
void ErasePostfix();
void Output();

int main()
{
    //freopen("input.txt", "r", stdin);
    int i;
    while (fgets(in, 200, stdin) != NULL)
    {
        number = 0;
        Initial();
        EraseEmpty();   //消去空格
        ErasePrefix();  //消去前缀.
        ErasePostfix();  //消去后缀, 这时只剩下一个基本的表达式.
        Output();
        memset(in, 0, sizeof(in));
    }
    return 0;
}

void Output()
{
    int i, j;
    number = num[temp[0] - 97];
    for (i = 0; i < temp.size(); i++)
    {
        if (temp[i] == '+')
            number += num[temp[i + 1] - 97];
        else if (temp[i] == '-')
            number -= num[temp[i + 1] - 97];
    }
    printf("Expression: %s", in);
    printf("    value = %d\n", number);
    for (i = 0; i < 26; i++)
    {
        for (j = 0; j < temp.size(); j++)
            if (word[i] == temp[j])
                printf("    %c = %d\n", temp[j], num2[temp[j] - 97]);
    }
}

void Initial()
{
    temp.clear();
    for (int i = 0; i < 26; i++)
    {
        num[i] = i + 1;
        num2[i] = i + 1;
    }
}

void EraseEmpty()
{
    int i;
    for (i = 0; i < strlen(in); i++)
    {
        if (in[i] == ' ')
            continue;
        else
            temp.push_back(in[i]);
    }
}

void ErasePrefix()
{
    int i;
    for (i = 0; i < temp.size(); i++)
    {
        if (isalpha(temp[i]))
        {
            if (i == 0)         //因为要检查前两个字符, 如果第一个就是字母会越界.
                continue;
            else
            {
                if (temp[i - 1] == '-' && temp[i - 2] == '-')
                {
                    num[temp[i] - 97]--;
                    num2[temp[i] - 97]--;
                    temp.erase(temp.begin() + i - 2, temp.begin() + i);
                }
                else if (temp[i - 1] == '+' && temp[i - 2] == '+')
                {
                    num2[temp[i] - 97]++;
                    num[temp[i] - 97]++;
                    temp.erase(temp.begin() + i - 2, temp.begin() + i);
                }
            }
        }
    }
}

void ErasePostfix()
{
    int i;
    for (i = 0; i < temp.size(); i++)
    {
        if (isalpha(temp[i]))
        {
            if (i == temp.size() - 1)   //同理, 防止越界
                break;
            else
            {
                if (temp[i + 1] == '-' && temp[i + 2] == '-')
                {
                    num2[temp[i] - 97]--;
                    temp.erase(temp.begin() + i + 1, temp.begin() + i + 3);     //干掉
                }
                else if (temp[i + 1] == '+' && temp[i + 2] == '+')
                {
                    num2[temp[i] - 97]++;
                    temp.erase(temp.begin() + i + 1, temp.begin() + i + 3);
                }
            }
        }
    }
}






"大规模基准数据集用于评估泛锐化性能"是一个用于评估图像泛锐化算法表现的数据集。泛锐化是一种图像处理技术,旨在通过将低分辨率的多光谱图像与高分辨率的全色图像融合,以产生具有较高空间分辨率和丰富光谱信息的图像。这种技术在许多遥感应用中都很有用,例如土地利用监测、资源管理和环境监测。 该数据集的规模大,包含了大量的多光谱和全色图像对,这些图像对均具有全面的注释和质量测量指标。这些图像对来自各种不同的遥感源,涵盖不同的场景和条件。数据集的构建过程经过精心设计,以保证评估结果的准确性和可靠性。 使用该数据集,研究人员和开发者可以对他们的泛锐化算法进行全面的评估和对比。他们可以将自己的算法应用于数据集中的图像对,并使用数据集中提供的注释进行性能评估。这些注释可以包括图像质量评价指标,如结构相似性指数(SSIM)和峰值信噪比(PSNR),或者一些更复杂的图像质量评价方法,如目标检测和目标分类任务的准确率。通过与其他算法进行比较,开发者可以了解他们的算法在不同场景和条件下的表现如何,并进一步改进和优化他们的方法。 "大规模基准数据集用于评估泛锐化性能"的建立为泛锐化算法的发展提供了一个公共的平台,促进了该领域的研究和进步。研究人员和开发者可以根据数据集中的结果和经验得出更好的算法和技术,进一步提高泛锐化算法在实际应用中的效果。这个数据集的存在为遥感图像处理的研究和应用带来了很大的推动力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值