{ "question_id": 1080248, "question_title": "擅长编码的小k", "question_content": "题目描述\n小k不仅擅长数学,也擅长编码。有一种编码方式如下:\n首先写下文本中间的字符(如果文本中的字符编号为1..n,那么中间一个字符的编号为(n+1)DIV 2,其中DIV为整除的意思),然后 用这个方法递归地写下左边,最后再按这个方法递归地写下右边。例如,单词为orthography则其编码为gtorhoprahy。即先写中间的那个字符g,再对ortho递归地编码,最后将raphy递归地编码就得到了gtorhoprahy。\n给一个原来的文本,求出编码后的 文本。\n输入\n一行字符,表示原始的文本内容。\n输出\n一行字符,表示编码后的文本内容。\n样例\n输入 \northography\n输出 \ngtorhoprahy\n提示\n100%的数据,字符串长度不超过20000", "difficulty": "困难", "answer_id": 1285384, "answer_content": "利用递归,先输出中间的字符,然后输出递归输出左边的,再递归输出右边的。代码如下:\n\n```\n#include \n#include \nusing namespace std;\n\nvoid shuchu(char *a,int m, int n)\n{\n if(n<=0||m<=0||m>n)\n {\n return;\n }\n else\n {\n cout << a[(m+n)/2];\n shuchu(a,m,(m+n)/2-1);\n shuchu(a,(m+n)/2+1,n);\n }\n}\n\nint main()\n{\n char a[20000];\n char b[20001];\n cin >> a;\n for(int i=0; i<20000; i++)\n {\n b[i+1] = a[i];\n }\n int n = strlen(a);\n shuchu(b,1,n);\n return 0;\n}\n\n\n```", "tag_name": "c++", "cpp": "#include \n#include \nusing namespace std;\nvoid shuchu(char *a,int m, int n)\n{\n\tif(n<=0||m<=0||m>n)\n\t{\n\t\treturn;\n\t}\n\telse\n\t{\n\t\tcout << a[(m+n)/2];\n\t\tshuchu(a,m,(m+n)/2-1);\n\t\tshuchu(a,(m+n)/2+1,n);\n\t}\n}\nint main()\n{\n\tchar a[20000];\n\tchar b[20001];\n\tcin >> a;\n\tfor(int i=0; i<20000; i++)\n\t{\n\t\tb[i+1] = a[i];\n\t}\n\tint n = strlen(a);\n\tshuchu(b,1,n);\n\treturn 0;\n}", "topic_link": "https://bbs.csdn.net/topics/600469956", "status": 1, "keywords": "算法初阶,基础知识,分治策略,用主方法求解递归式", "license": "csdn.net", "notebook": { "cpp": "https://codechina.csdn.net/csdn/csdn-daily-code/-/jupyter/master/data/notebook/answer/ipynb/cpp/97.ipynb?type=file" }, "notebook_enable": 1 }