对字符串排序问题

帅帅哒的中级学徒丶 2017-05-20 09:20:16
用c++语言,列出从 字符串GINRT 到 UTRNIG 之间所有的不重复(字符串内部无相同字符)的字符串,并且按字典的顺序排序
有没有大神帮个忙,在线等!!!!
...全文
149 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
已经解决了,用DFS遍历就可以解决了 ,
  • 打赏
  • 举报
回复
只用U T R N I G这几个字符 上面是GINRTU U没打上。。尴尬 然后 从GINRTU 到 UTRNIG 中间的字符串 ,每个字符使用一次,然后对这这些字符串排序
ck2333 2017-05-20
  • 打赏
  • 举报
回复
引用 1 楼 qq_36409192 的回复:
不知道你想表达的是不是这个意思
#include <iostream>
using namespace std;

int main()
{
	char p[6]="GINRT";
	int top = 4, num = 0;
	while (1) {
		for (int i = 0; p[i] == 'Z'; i++)
		{
			num++;
			if (num == 6) {
				return 0;
			}
		}
		num = 0;

		for (int i = 0; p[i]; i++) {
			cout << p[i];
		}
		cout << endl;

		if (p[top] == 'Z') {
			for (int i = top - 1; i >= 0; i--) {
				if (p[i] < 'Z') {
					p[i]++;
					for (int j = i + 1; j <= top; j++) {
						p[j] = 'A';
					}
					break;
				}
			}
		}
		else {
			p[top]++;
		}

		for (int i = 0; p[i] == 'Z'; i++)
		{
			num++;
			if (num == 5) {
				for (int j = 0; j < 6; j++) {
					p[j] = 'A';
				}
				top = 5;
			}
		}
		num = 0;
	}
	//system("pause");
	return 0;
}
代码写的不是很好,看看就行了,有bug。
ck2333 2017-05-20
  • 打赏
  • 举报
回复
不知道你想表达的是不是这个意思
#include <iostream>
using namespace std;

int main()
{
	char p[6]="GINRT";
	int top = 4, num = 0;
	while (1) {
		for (int i = 0; p[i] == 'Z'; i++)
		{
			num++;
			if (num == 6) {
				return 0;
			}
		}
		num = 0;

		for (int i = 0; p[i]; i++) {
			cout << p[i];
		}
		cout << endl;

		if (p[top] == 'Z') {
			for (int i = top - 1; i >= 0; i--) {
				if (p[i] < 'Z') {
					p[i]++;
					for (int j = i + 1; j <= top; j++) {
						p[j] = 'A';
					}
					break;
				}
			}
		}
		else {
			p[top]++;
		}

		for (int i = 0; p[i] == 'Z'; i++)
		{
			num++;
			if (num == 5) {
				for (int j = 0; j < 6; j++) {
					p[j] = 'A';
				}
				top = 5;
			}
		}
		num = 0;
	}
	//system("pause");
	return 0;
}
ck2333 2017-05-20
  • 打赏
  • 举报
回复
引用 3 楼 帅帅哒的初级学徒丶的回复:
只用U T R N I G这几个字符 上面是GINRTU U没打上。。尴尬 然后 从GINRTU 到 UTRNIG 中间的字符串 ,每个字符使用一次,然后对这这些字符串排序
我好像理解错了。你说的应该是用回溯求所有可能性吧!
ck2333 2017-05-20
  • 打赏
  • 举报
回复
引用 3 楼 Qaz2261295887 的回复:
只用U T R N I G这几个字符 上面是GINRTU U没打上。。尴尬 然后 从GINRTU 到 UTRNIG 中间的字符串 ,每个字符使用一次,然后对这这些字符串排序
#include <iostream>
using namespace std;

int main()
{
	char p[7]="GINRTU";
	int top = 5, num = 0;
	while (1) {
		for (int i = 0; p[i] == 'Z'; i++) //把结束条件改下,我这里设定的是到ZZZZZZ结束
		{
			num++;
			if (num == 6) {
				return 0;
			}
		}
		num = 0;

		for (int i = 0; p[i]; i++) {
			cout << p[i];
		}
		cout << endl;

		if (p[top] == 'Z') {
			for (int i = top - 1; i >= 0; i--) {
				if (p[i] < 'Z') {
					p[i]++;
					for (int j = i + 1; j <= top; j++) {
						p[j] = 'A';
					}
					break;
				}
			}
		}
		else {
			p[top]++;
		}
	}
	return 0;
}

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧