小说网 找小说 无限小说 烟雨红尘 幻想小说 酷文学 深夜书屋

基于visual Studio2013解决面试题之0403串联字符串




题目



解决代码及点评

/*

	有 n个长为 m+1的字符串,如果某个字符串的最后m个字符与某个字符串的前m个字符匹配,则两个字符串可以联接,
	问这n个字符串最多可以连成一个多长的字符串,如果出现循环,则返回错误。 

*/

#include <iostream>
using namespace std;

int maxlengh = 0;

void go(char *a[20], char **a2, int n)
{
	// 遍历13个字符串
	for (int i = 0; i < 13; i++)
	{
		int flag = 0;
		// 判断a[i]是不是在a2里,如果是flag = 1
		for (int j = 0; j < n; j++)
		{
			if (a[i] == a2[j])
			{
				flag = 1;
			}
		}
		if (flag == 1) // 如果是在a2里,那么就看下一个字符串
		{
			continue;
		}

		if (n == 0) // n == 0 表示a2里还没有字符串
		{
			a2[n] = a[i]; // 既然没有,就直接将a[i]保存吧

			n++; // 保存完a2里就多了一个元素,要记录
			if (n > maxlengh) // 如果n>maxlengh,那么重新记录max
			{
				maxlengh = n;
			}
			go(a, a2, n); // 递归调用本函数
			n--;
		}
		// 如果n不是0,那么判断a[i]是不是符合条件
		else if (a2[n - 1][1] == a[i][0] && a2[n - 1][2] == a[i][1] && a2[n - 1][3] == a[i][2])
		{
			a2[n] = a[i]; // 如果符合条件,就把它记录到a2

			n++;
			// 一样的重新记录maxlength
			if (n > maxlengh)
			{
				maxlengh = n;
			}
			// 递归继续
			go(a, a2, n);
			n--;
		}

	}
}

/* 测试主函数 */
int main()
{
	char *a[20] = { "abcd", "bcde",
		"cdea", "deab", "eaba",
		"abab", "deac", "cdei",
		"bcdf", "cdfi", "dfic",
		"cdfk", "bcdg" };
	char *a2[20];
	go(a, a2, 0);
	cout << maxlengh;
	system("pause");
	return 0;
}



代码下载及其运行

代码下载地址:http://download.csdn.net/detail/yincheng01/6704519

解压密码:c.itcast.cn


下载代码并解压后,用VC2013打开interview.sln,并设置对应的启动项目后,点击运行即可,具体步骤如下:

1)设置启动项目:右键点击解决方案,在弹出菜单中选择“设置启动项目”


2)在下拉框中选择相应项目,项目名和博客编号一致

3)点击“本地Windows调试器”运行


程序运行结果









posted on 2013-12-15 00:03  牛栏山1  阅读(124)  评论(0编辑  收藏  举报

导航