说明:
前不久买了刘汝佳老师的《算法竞赛入门经典》,一个人慢慢地学着。
自己做书后面的上机练习,有些做不来,网上找答案,找到的也不知道是不是高效最优的算法,表示很无奈和迷茫。
鉴于此,我把自己学习过程中,自己写的答案贴出来,希望有和我一样境遇的人互相学习吧.
其他的上机练习答案我也会找时间上传。
上机练习
习题3-2 单词的长度(word)
题目:输入若干个单词,输出他们的平均长度。单词只包含大写字母和小写字母,用一个或多个空格隔开。
我的答案:
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <ctype.h>
#define MAXN 1000
char s[MAXN];
//this is a c source file
//produced by Boucher
int main(){
fgets(s,sizeof(s),stdin);
int cnt = 0 ;
int len = strlen(s);
int flag = 1 , d = 0;
for(int i = 0;i<len;i++){
if(isalpha(s[i])){
if(0-flag!=0)cnt++;
flag = 0;
d++;
}else{flag = 1;}
}
printf("the length is %d , the number is %d , %.2lf\n",d,cnt,1.0*d/cnt);
return 0;
}
解释:其中的flag,用于标记连续多个字母之后的空格或连续多个空格之后出现的字母,flag每变化一次,表示多了一个单词(不是多了一个字母)。