题目没有难度,逻辑上十分清晰,唯一纠结点的可能就是题目比较长..
这个题目需要注意的一点就是用scanf输入一个整数后回车,再用fgets去读时,会直接读到换行,也就是直接结束掉了.
因此需要在scanf后面用getchar()或者是fgetc(stdin)处理一下.
(同样,注意把数组适当加大,防止越界)
PS.我在这个题上卡了2个多小时,一直WA. 结果发现我一直用的max来记最多的空格数.但是题目的意思我又十分清楚.
所以还是对待错误没有清醒的头脑去解决.
Tip: 当发现答案不正确,而又将一些输入输出及边界考虑好的时候,应当抛弃原来对题目的思维,用对待新问题的眼光再一次 去验证程序的逻辑.
代码如下:
#include<stdio.h> #include<string.h> char buf[13+2][25+5]; int n[13+2]; int main() { int d,i,j,min,x; while(1) { scanf("%d",&d); if(d == 0) break; fgetc(stdin); min = 25; x = 0; memset(n,0,sizeof(n)); for(i = 0; i < d; i++) { fgets(buf[i],30,stdin); for(j = 0; j < 25; j++) { if(buf[i][j] == ' ') n[i]++; } if(n[i] < min) min = n[i]; } for(i = 0; i < d; i++) { x = x + n[i] - min; } printf("%d/n",x); } return 0; }