解答树后项添加的过程中因为存在分支,所以你想的一个排列不一定在你要的分支路径上,虽然已有的排列可能满足条件Uva129
2016-10-16 02:45
274 查看
有时候遇上往后缀添加任何字母都不合适的情况 #include <iostream> #include <string> using namespace std; //递归过程,顺序生成所有的字串。str保存结果,n和L为题目中给出的同名变量 void Sequence(string &str, int &n, int L) { //记录字串长度,以加快运算 int nLen = str.length(), nHalf = (str.length() + 1) / 2; //在结果字串后面依次尝试添加前L个大写字母 for (char i = 'A', iEnd = L + 'A', m = 1; i < iEnd; ++i) { str.push_back(i); //插入当前字符 //下面判断新生成的字符串中是否存在相邻的重复 //第1次判断最后1个字符,第2次判断最后2个字符,以此类推 for (m = 1; m <= nHalf; ++m) { //将最后的i个字符与之前的i个字符比较,如果有相同则跳出 if (equal(str.end() - m, str.end(), str.end() - m * 2)) { m = 0; //将m置为0表示存在重复的相邻子串 break; //跳出循环 } } if (m != 0) { //如果不存在重复 //如果生成的字串已经够数,返回上一级 if (--n == 0) return; Sequence(str, n, L); //进入下一级调用 //如果生成的字串已经够数,返回上一级 if (n == 0) return; } //删除刚添加在后面的字符,保持结果字串在进入这一级时的原状 str.erase(nLen); //准备为添加下一个字符作准备 } } //主函数 int main(void) { for (int n, L; cin >> n >> L && n != 0; ) { //循环读取每一组输入的数据 string str; //结果字符串 Sequence(str, n, L); //递归生成所有的无相邻重复字串 int nLen = str.length(); //保留生成字串的字符数量 for (size_t i = 4; i < str.length(); i += 5) { //按格式处理字串 //每隔4个插入一个空格,每隔80字符插入一个回车 str.insert(str.begin() + i, i == 79 ? '\n' : ' '); } //输出结果字串和字符数量 cout << str << '\n' << nLen << endl; } return 0; }
Distributed under GPLv3. |
Project Homepage | Developer:
51isoft crccw | Current Style:Cerulean.
Select Style:
Fluid Width?
相关文章推荐
- 解答树后项添加的过程中因为存在分支,所以你想的一个排列不一定在你要的分支路径上,虽然已有的排列可能满足条件Uva129(TMDTMDMTMD)从九点到早上四点终于干翻了,主要集中输出格式递归迭代算法
- 图的深度优先查找(DFS: Depth -First Search) (1)问题分析 DFS可从任意一个顶点开始访问,其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个顶点只能访问
- 多种排列方式满足条件,输出按照名字排列字典序最小的一个
- PYTHON实现将一个文件夹下的名字满足条件的图片拷贝复制到另一个文件夹路径
- 在情报传递过程中,为了防止情报被截获,往往需要对情报用一定的方式加密,简单的加密算法虽然不足以完全避免情报被破译,但仍然能防止情报被轻易的识别。我们给出一种最简的的加密方法,对给定的一个字符串,把其中
- 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串"bccced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中
- 杭电1406先前写的一个错误,因为没有注意给的a,B不一定是A》B所以错误,先确定A,B大小才可以
- 第八题:牛牛的作业薄上有一个长度为 n 的排列 A,这个排列包含了从1到n的n个数,但是因为一些原因,其中有一些位置(不超过 10 个)看不清了,但是牛牛记得这个数列顺序对的数量是 k,顺序对是指满足 i < j 且 A[i] < A[j] 的对数,请帮助牛牛计算出,符合这个要求的合法排列的数目。
- 给定一棵二叉树,每个结点包含一个值。打印出所有满足以下条件的路径: 路径上结点的值加起来等于给定的一个值。注意:这些路径不必从根结点开始。
- 现在有一个城市销售经理,需要从公司出发,去拜访市内的商家,已知他的位置以及商家的位置,但是由于城市道路交通的原因,他只能在左右中选择一个方向,在上下中选择一个方向,现在问他有多少种方案到达商家地址。给定一个地图map及它的长宽n和m,其中1代表经理位置,2代表商家位置,-1代表不能经过的地区,0代表可以经过的地区,请返回方案数,保证一定存在合法路径。保证矩阵的长宽都小于等于10。
- 因为想要获取一个免费的mockups license,所以想发布一篇宣传它的文章,但自己写的又不如别人已有的好,所以,不如偷偷懒,转个贴吧!只要能宣传就好,以下是转帖原文
- 给定一棵二叉树,每个结点包含一个值。打印出所有满足以下条件的路径: 路径上结点的值加起来等于给定的一个值。注意:这些路径不必从根结点开始。
- 检查一个路径下文件是否存在,如果不存在设置一个定时器,在定时器内每隔一定时间检查一次,直到该文件存在返回成功,或者定时超时返回失败
- 一个整数数列,元素取值可能是1~N(N是一个较大的正整数)中的任意一个数,相同数值不会重复出现。设计一个算法,找出数列中符合条件的数对的个数,满足数对中两数的和等于N+1
- 求一个数组中满足一定条件的两个元素的最大差值
- UVA565订披萨,每个人提几个条件,至少满足每个人的一个条件的方案
- 解答:一个perl操作config.ini的出现的 cannot find file or dirctionary,可明明文件存在
- 【 CodeForces 209C】 【欧拉回路推结论+并查集计算联通分量】 【给定n点m边无向图,可能有自环和重边。 问最少添加多少条边后,使得图存在从点1出发发又回到点1的欧拉回路】
- 10.A、B、C、D、E、F、G、H、I、J 共10名学生有可能参加本次计算机竞赛,也可能不参加。因为某种原因,他们是否参赛受到下列条件的约束:
- hRet = 0x8001010d 因为应用程序正在发送一个输入同步呼叫,所以无法执行传出的呼叫。