user-0 提问: 一道ＡＣＭ题的疑惑

回复:
user: user-1
content: 两个输出有空行，应该\n\n吧

user: user-2
content: fgets(s,80,stdin);if ('\n'==s[strlen(s)-1]) s[strlen(s)-1]=0;//去掉字符串末尾的'\n'

user: user-0
content: 引用 18 楼 zhao4zhong1 的回复:所以建议楼主读串时不能用scanf("%s",s)而要用fgets(s,80,stdin); 的确有你说的那个输入数据中存在Ｈ　Ｈ　Ｈ　 的问题，我再试试

user: user-2
content: 所以建议楼主读串时不能用scanf("%s",s)而要用fgets(s,80,stdin);

user: user-2
content: Each test case will contain a single character string of up to 80 non-blank characters.  这句话里面的non-blank characters只能按下面两种意思中的一种来理解；而不能按两种意思同时成立来理解。 ①非空格字符组成的字符串（字符串中没有空格，但可能是空串） ②非空的字符串（字符串不是空串，但可能其中包含空格） 而你的代码无论按①来理解还是按②来理解都通不过。  你试试最简单的输入 1  a ba b 你的代码能不能如期输出3

user: user-0
content: 引用 13 楼 zhao4zhong1 的回复:也可能 每项测试数据包含一个最长80个非空的字符串  但你 考虑了每行字符由一个空行间隔了吗？ 考虑了字符串中有空格的情况了吗？ 比如输入文件是： 2  H_ H_ H_   HaHaHa 上面的下划线实际不是下划线而是空格，为表达清楚用下划线代替。 ．．题目说了ｎｏｎ－ｂｌａｎｋ　ｃｈａｒａｃｔｅｒ

user: user-0
content: 引用 12 楼 user-3 的回复:Two consecutive output are separated by a blank line. 它没说最后一个数据后面也要输出空行  代码暂时没看出啥问题 我尝试下把最后一次空行给弄掉

user: user-0
content: 引用 11 楼 zhao4zhong1 的回复:The first line of the input file will contain a single integer N indicating how many test case that your program will test followed by a blank line. Each test case will contain a single character string of up to 80 non-blank characters. Two consecutive input will separated by a blank line. 输入文件的第一行是一个整数，表示后面有多少项测试数据。 第二行是空行。 每项测试数据包含一个最长80个非空格字符组成的字符串。两个连续的测试数据之间用一个空行间隔。  所以输入文件可能是： 1  HoHoHo 也可能是 2  HoHoHo  HaHaHa 也可能是 3    HoHoHo  HaHaHa 我觉得。 可是就算是这样，我在自己机子上测试得到的答案还是对的，提交测评机就不行了．．您能帮我看看我贴的代码么，我弄了一天还是没找出问题所在．谢谢

user: user-2
content: 也可能 每项测试数据包含一个最长80个非空的字符串  但你 考虑了每行字符由一个空行间隔了吗？ 考虑了字符串中有空格的情况了吗？ 比如输入文件是： 2  H_ H_ H_   HaHaHa 上面的下划线实际不是下划线而是空格，为表达清楚用下划线代替。

user: user-3
content: Two consecutive output are separated by a blank line. 它没说最后一个数据后面也要输出空行  代码暂时没看出啥问题

user: user-2
content: The first line of the input file will contain a single integer N indicating how many test case that your program will test followed by a blank line. Each test case will contain a single character string of up to 80 non-blank characters. Two consecutive input will separated by a blank line. 输入文件的第一行是一个整数，表示后面有多少项测试数据。 第二行是空行。 每项测试数据包含一个最长80个非空格字符组成的字符串。两个连续的测试数据之间用一个空行间隔。  所以输入文件可能是： 1  HoHoHo 也可能是 2  HoHoHo  HaHaHa 也可能是 3    HoHoHo  HaHaHa 我觉得。

user: user-0
content: 引用 9 楼 zhao4zhong1 的回复:题目中没有说测试数据没有空串。   Each test case will contain a single character string of up to 80 non-blank characters

user: user-2
content: 题目中没有说测试数据没有空串。

user: user-0
content: 引用 5 楼 zhao4zhong1 的回复:a aa aaa ？ 取最小周期，．．测试数据没有空串

user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:abababab 的最小周期应该是几？  ababab最小周期为２ hello最小周期为５

user: user-2
content: 空串 ？

user: user-2
content: a aa aaa ？

user: user-0
content: #include<stdio.h> #include<string.h>  #define MAX 90 void periodic(const char *s);  int main(void){ int n; char s[MAX]; scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%s",s); periodic(s); } return 0; }  void periodic(const char *s){ int len,k; len=strlen(s); for(int i=1;i<=len/2;i++){ char b[MAX]=""; if(len%i==0){ k=len/i; //重复次数 for(;k>0;k--){ strncat(b,s,i); } if(!(strcmp(s,b))){ printf("%d\n",i); goto next; } } } printf("1\n"); next: printf("\n"); }  不好意思．．刚来，没弄成代码．．这样可能清楚点

user: user-2
content: abababab 的最小周期应该是几？

user: user-0
content: 我的思路如下：如果一个字符串（Ａ）能由某个字符串（Ｂ）重复，那么那个字符串Ａ的长度必然是Ｂ的整数倍，那就可以求出Ｂ需要ｎ次才能变成Ａ．．重复那个次数使字符串ｂ变成重复ｎ次Ｂ，再判断ｂ和Ａ是否相等． 我自己做的测试得到的答案都是对的（也可能只是我认为），但是提交之后总是ｗｒｏｎｇ　ａｎｓｗｅｒ