首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

QuickSum解决思路

2012-02-20 
QuickSum描述:校验和是通过一定的算法扫描一个数据计算出的一个数值。如果数据被改变了,则校验和也应该发生

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;
}

热点排行