Quicksum

记录一下,最近在整ACM的东西

 

 

 

题目

                                     Quicksum

    checksum 是扫描一个数据包并返回一个数值的一种算法。其思路在于,如果数据包被

修改过,那么,checksum 也会立即变化。所以,checksum 常常用于侦查数据传输错误,证

实文档内容的完整性和其他需要检查数据不被修改的场合。

    在本题中,你将实现一个 checksum 算法即 Quicksum。一 个 Quicksum 数据包仅允许包含大写字母和空格,它通常是由一个大写字母开始和结束。然而,空格和字母可以出现在其他的位置中,连续的空格也是允许的。

    Quicksum 是一行字符串(数据包)中每个字符的位置与该字符的值的乘积之和。空格

的值是 0,字母的值等于它在字母表中的位置。所以,的值是 1的值是 2,依此类推,的值是 26。下面两个例子是求“ACM”“MID CENTRAL”的 Quicksum

    ACM: 1*1 + 2*3 + 3*13 = 46 

MID CENTRAL: 1*13 + 2*9 + 3*4 + 4*0 + 5*3 + 6*5 + 7*14 + 8*20 + 9*18 + 10*1 + 11*12 = 650

 

 

输入描述

输入数据包含一个或多个数据包,输入数据以“#”结束。每个数据包占一行,不能以空格开始或结束,包含 1255 个字符。

 

 

输出描述

对于每个数据包,在每一行上输出它的 Quicksum

输入样例 输出样例

ACM 

MID CENTRAL 

REGIONAL PROGRAMMING CONTEST 

CAN 

A C M 

ABC 

BBC 

46 

650 

4690 

49 

75 

14 

15

 

 

 

#include<iostream>
#include<string>
using namespace std;
int main()
{
	char ch[256];
	int sum;
	while(cin.getline(ch,256))
	{
		if(ch[0] == '#')
		{
			break;
		}
		sum = 0;
		for(int i=0;ch[i] != '\0';i++)
		{
			if(ch[i] != ' ')
			{
				sum += (i+1)*(ch[i] - 64);		
			}
		}
		cout<<sum<<endl;
	}
}
 以上,数据的读入,按照一行一行的方式读入数据,可以直接忽视掉'\n'




#include<iostream>
#include<string>
using namespace std;
int main()
{
	char ch;
	int sum;
	int i ;
	i = 1;
	sum = 0;
	while(cin.get(ch))
	{
		
		if(ch == '#')
		{
			break;
		}
	 	if(ch != '\n')
		{
			if(ch != ' ')
			{
				sum += i*(ch - 64);
							
			}
			i++; 
		}
		if(ch == '\n')
		{
			cout<<sum<<endl;
			sum = 0;
			i = 1;
		}
	}
	return 0;
}
 而,cin.get()函数,是一个一个的读入字符,cin.get()函数不会忽视掉'\n',因此,需要对回车符进行单独处理。



A~Z的值对应1~26,而A的ASCII为65,因此,A对应的值,就是ch-64。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值