QuickSum
描述:
校验和是通过一定的算法扫描一个数据计算出的一个数值。如果数据被改变了,则校验和也应该发生变化,这样就可以判断数据在传输过程中是否出现差错。在这个问题中,你将实现一个称为Quicksum的校验和算法。Quicksum算法计算由大写字母和空格组成的数据。并且数据开始和结尾的空格不加入计算。一个数据的Quicksum是每个字符的在数据中的位置乘以该字符的值。空格值为0,字母的值就是其在字母表中的位置。因此A=1,B=2,etc。如下是 "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
输入:
每个输入只包含一个数据,占一行,不会以空格开头结尾,长度不超过255字符。
输出:
对于每一个数据,输出其校验和,占一行。
输入样例:
REGIONAL PROGRAMMING CONTEST
输出样例:
4690
[解决办法]
int sum(const char* str)
{
int sum = 0;
const char* p = str;
while(*p)
{
if (*p == ' ')
{
p++;
continue;
}
sum += (*p - 0x40) * (p - str + 1);
p++;
}
return sum;
}
void main()
{
printf( "%d\r\n ", sum( "ACM "));
printf( "%d\r\n ", sum( "MID CENTRAL "));
printf( "%d\r\n ", sum( "REGIONAL PROGRAMMING CONTEST "));
}
[解决办法]
#include <stdio.h>
#include <stdlib.h>
int qsum(const char* str)
{
int sum = 0, i=0;
for(i=0; i <strlen(str); i++)
{
if (str[i] == ' ')
continue;
sum += (i+1) * (str[i]- 'A '+1);
}
return sum;
}
int main(int argc, char **argv)
{
char str[256];
puts( "Input a line: ");
gets(str);
printf( "The QuickSUM is: %d\n ", qsum(str));
system( "pause ");
return 0;
}
[解决办法]
呵呵
#include "stdio.h "
int val(char a)
{
if(a> = 'A '&&a <= 'Z ')
return (a-64);
else if(a = ' ')
return 0;
else
return 0;
}
int main(void)
{
char s[100];
unsigned int i,sum=0;
gets(s);
for(i=0;i <strlen(s);i++)
sum+=(i+1)*val(s[i]);
printf( "%d\n ",sum);
return 0;
}
[解决办法]
zoj 上AC的,2812quicksum:
#include <stdio.h>
int main()
{
int i,sum;
char array[1000];
gets(array);
while (array[0] != '# ')
{
sum=0;
for (i=0; array[i] != '\0 '; i++)
{
if (array[i] != ' ')
{
sum+=(int)(array[i]- 'A '+1)*(i+1);
}
else
sum+=0;
}
printf( "%d\n ",sum);
gets(array);
}
return 0;
}