6月26日是个值得纪念的日子,我们于六点在ZCMUOJ开展了第一次ACM选拔赛。七道题最后才A了三道。深深感觉到自己的弱菜和基础不牢。
第一题为输出一个整数的各位数字(http://acm.zcmu.edu.cn/JudgeOnline/problem.php?cid=1188&pid=0),我竟然没A,对于大数据要牢记使用字符数组,格式必须注意,最后一个输出时不带空格就分两次输出,可以巧用flag;
第二题为求完数,注意包含1的特殊情况细节,
第三题为10->16进制转换,对于基础掌握要牢固,可以直接用%X输出,但是这样太没难度了,如果用while循环+%运算+字符和整型转换会更有趣一点;
第四题为周期串,周期串emmm···是困扰我蛮久的问题,%和周期性的联系之前一直没搞懂,在循环队列的时候疑惑就存在了,还有二次循环探测,j%i是第二周期的开头。问了几个朋友,摘录回答如下:
- 循环周期为i,则第一个周期的所有字符下标依次为0到i-1,所以下标为i的字符自然为第二周期的首字符。j mod i的值结果只能在0到i-1之间,所以str[j]与str[j%i]的比较即是将当前下标为j的字符与第一个周期的所有字符进行比较(因为j的初值为i,所以j mod i的值必定依次为0到i-1)。j的值是从i到len,那么j从i到2i-1走完一个周期后,必定走到下一个周期,然后再走到下一个周期。如果该字符串满足循环字符串的条件,那么j的终值必为len,否则跳出。所以你的程序在判断该字符串是否为循环字符串时应该还需要添加一个条件,即需判断j的终值是否为len,如果不是len,这说明该字符串不是循环字符串。
- 纸上演示一下。
- 因为周期性的含义就是会重复出现,当然要用%运算呀,用%运算,你才能知道它第二个周期第一个字符的位置,周期性匹配问题往往都会用到%运算,它这个是二重循环遍历所以情况,分别枚举长度,
如果不匹配,就每次向右移动一个字符,j是枚举周期串最后一个字符在哪个位置,i是枚举周期串第一个字符,然后因为有周期性,所以要%运算。 - 不是前一个周期,是取周期为i的第一个周期,这样做的目的是检测后几个周期是否都与第一个周期相同。
第五题为小孩报数,和约瑟夫环/丢手绢问题有异曲同工之妙,可以用循环链表,然而数据结构没学好,Sad···也可以用数组装···http://www.docin.com/p-513583501.html有类似题解,待会看。
第六题为三个家庭,注意理解题意;
第七题为大数阶乘的位数统计,貌似有公式,开个大数组,手动模拟log10(i)的累加···还要仔细看看才行。