CF110B 题解
这题居然没有 Pascal 的题解,那我就写一篇吧。
题目翻译&做法分析:
给定一个数 $n$ 让你输出满足这三个条件的字符串:
- 整个字符串都由小写字母组成;
- 两个相同字母之间的距离为 4 或 7。
- 在满足以上条件的前提上,字符串尽量最小。
然后我们就可以开始找规律,首先,字典序是最小的,那不就是 $a$,$b$,$c$,$d$…… 等等,按顺序来。
接着,我们画出一个表格:
先把字典序最小的 $a$ 填进去(注意:两个相同字母之间的距离为 4 或 7。) 为了字典序最小,所以肯定是字典序越小的字母越往前。
a | b | c | d | a | b | c | d | a | …… |
---|
照上面这样子填下去,发现有一个循环节 a
+bcda
+bcda
+bcda
+…… 那我们就可以开始写程序了。
完整代码:
Pascal 代码:
var n,i:longint; begin read(n); //输入 for i:=0 to n-1 do //循环 n 次 write(chr(97+i mod 4)); //刚刚找到的规律 end.
C++ 代码:
#include<iostream> #include<cstdio> int i,j,n,m; int main(){ scanf("%d",&n); //输入 for(i=0;i<n;i++) //循环 n 次 putchar(97+i%4); //刚刚找到的规律 }
提交结果显示,Pascal 的代码会比 C++ 慢 1~2 秒,但内存要更少。
希望本题解对大家有帮助,也感谢管理员在百忙之中帮助我审核题解,谢谢!