UVA - 327 Evaluating Simple C Expressions

2016.11.10


UVA - 327 Evaluating Simple C Expressions

题目大意:根据 ++、-- 的性质计算,a = 1,b = 2……z = 26。输出计算结果和计算后各字母的值。

解题思路:暴力模拟。每碰到一个字母,检查该字母前后是否存在前缀,若存在,将改字母对应的值 +1 或 -1,找到字母前的一个符号 + 或 -,进行对应计算,接着检查该字母是否存在后缀,若存在,将改字母对应的值 +1 或 -1。输出即可。注意自增符号前缀和后缀的计算顺序是不同的,有点难处理。

#include<stdio.h>
#include<string.h>
#include<ctype.h>
#define max 20000

int main() {
	int i,j,l,pos,sum,a[26],use[26],postion;
	char s[max+1],ch[max];
	while (fgets(s, max, stdin)) {
		for (i = 0; i < 26; i++) {
			a[i] = i + 1;
			use[i] = 0;
		}
  		l=0;
  		for (i = 0; s[i] != '\0'; i++)
  			if ( (s[i] == '+') || (s[i] == '-') || (isalpha(s[i]))){
				ch[l] = s[i]; 
				++l;
			}
		if (isalpha(ch[0])) {
			sum = a[ch[0]-'a'];
			postion = ch[0]-'a';
			use[postion] = 1;
			pos = 1;
		}                //第一个数字特殊处理
  		if ((ch[0] == '+') && (ch[1] == '+'))  {
			++a[ch[2]-'a'];
			sum = a[ch[2]-'a'];
			postion = ch[2]-'a';
			use[postion] = 1;
			pos = 3;
		}   //同上
  		if ((ch[0] == '-') && (ch[1] == '-')) {
			--a[ch[2]-'a'];
			sum = a[ch[2]-'a'];
			postion = ch[2]-'a';
			use[postion] = 1;
			pos = 3;
		}   //同上
  		while (pos < l)  {
			j = pos;
  			while ((j < l)&&(!isalpha(ch[j])))
				++j;
			if (j < l)
				use[ch[j]-'a'] = 1;
			if (j-pos == 1) {
				if (ch[pos] == '+')
					sum += a[ch[j]-'a'];
				else 
					sum -= a[ch[j]-'a'];
				postion = ch[j]-'a';
			} //+,-
			if (j-pos==3) {
				if ((ch[pos] == '+') && (ch[pos+1] == '+') && (ch[pos+2] == '-')) {	//++-
					++a[postion];
					postion = ch[j]-'a';
					sum = sum-a[postion];
				}
				if ((ch[pos] == '-') && (ch[pos+1] == '-') && (ch[pos+2] == '+')) { //--+
					--a[postion];
					postion = ch[j]-'a';
					sum = sum+a[postion];
				}
				if ((ch[pos] == '-') && (ch[pos+5] == '+') && (ch[pos+2] == '+')) { //-++
					postion = ch[j]-'a';
					++a[postion];
					sum = sum-a[postion];
				}
                if ((ch[pos] == '+') && (ch[pos+1] == '-') && (ch[pos+2] == '-')) { //+--
					postion = ch[j]-'a';
					--a[postion];
					sum = sum+a[postion];
				}
			}
			if (j-pos == 5) {
				if (ch[pos] == '+')
					++a[postion];
				else
					--a[postion];  //虽然有6种但是可以化简,
				postion = ch[j]-'a';
				if (ch[pos+4] == '+')
					++a[postion];
				else
					--a[postion];
                if (ch[pos+2] == '+')
					sum += a[postion];
				else
					sum -= a[postion];
			}
   			pos=j+1;
		}
		if ((ch[l-1] == '+') && (ch[l-2] == '+'))
			++a[ch[l-3]-'a'];  //最后一个数字特殊处理
		if ((ch[l-1] == '-') && (ch[l-2] == '-'))
			--a[ch[l-3]-'a'];  //同上
		printf("Expression: %s", s);
		printf("    value = %d\n", sum);
		for(i = 0; i < 26; i++)
			if (use[i])
				printf("    %c = %d\n",i+'a',a[i]);
	}
	return 0;
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值