![]() |
#2
mxs8102010-08-01 11:07
|
题目的意思大概是这样:校验和是通过一定的算法扫描一个数据计算出的一个数值。如果数据被改变了,则校验和也应该发生变化,这样就可以判断数据在传输过程中是否出现差错。在这个问题中,你将实现一个称为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
编写程序如下:
#include<iostream>
#include<string>
using namespace std;
int main()
{
char a[256];
int sum,i,n;
while(gets(a)!=NULL)
{
if(strcmp(a,“#”)==0)
break;
sum=0;
n=strlen(a);
for(i=0;i<n;i++)
{
if(a[i]!=‘ ')
{sum+=(a[i]-‘A'+1)*(i+1);}
}
printf("%d\n",sum);
}
return 0;
}
疑问:开始的时候,我的while语句是这样写的 while(1)然后结果是130且无限循环,为什么?
if(strcmp(a,“#”)==0)如果写成if(strcmp(a,‘#’)==0) 在DevC++中则会显示这行编译有错误 请问 #是字符还是字符串啊?
for语句的i为什么从0开始,从1开始错在哪里?
{sum+=(a[i]-‘A'+1)*(i+1);}是怎么计算和的? 第一次计算时i是多少呀?
如果printf("%d\n",sum);写成 cout<<endl;
cout<<sum; 为什么不自动换行了,例如输入ACM 回车得到46,不自动换行了。
问题有点多,请耐心解答,您的讲解是我进步的原因,谢谢。