以下是引用azzbcc在2016-12-14 10:43:25的发言:
正确性毋庸置疑,我也测试了len+1,吹水佬版主觉得呢
正确性毋庸置疑,我也测试了len+1,吹水佬版主觉得呢
我是按规则数组各组顺序取出(不重复)的字符作为初始输出字符串。
这个要看首先假设的字符串排列,如果一开始就是 abcde 就快好多了, 可以试试初始为 edcba, 看看有什么不同。
可以跟踪一下m的变化看看。
2016-12-14 11:03
2016-12-14 11:45
运行没问题啊?怎么回事!今天干脆把4楼代码(原7楼)也修正了,测试也正常。同时测试了错误数据(如:c d a,a b c),不会限于死循环.[此贴子已经被作者于2016-12-16 08:48编辑过]
2016-12-16 08:45

2016-12-16 09:05
2016-12-16 11:23
似乎没问题啊~[此贴子已经被作者于2016-12-16 12:34编辑过]

2016-12-16 12:31
这行没改~//check(array,sizeof(array));//change(array,p,sizeof(array));
2016-12-16 12:44
程序代码:#include <stdio.h>
char * fun(char array[][3], int len, char * ans)
{
char m[26][26] = {0}, d[26] = {0}, t[26] = {0}, * r = ans;
int i, j;
for(i = 0; i < len; i++)
{
char a = array[i][0] - 'a';
char b = array[i][1] - 'a';
char c = array[i][2] - 'a';
if(!m[a][b]) m[a][b] = 1, d[b]++;
if(!m[b][c]) m[b][c] = 1, d[c]++;
t[a] = t[b] = t[c] = 1;
}
for(i = 0; i < 26; i++)
{
if(!t[i] || d[i]) continue;
for(t[i] = j = 0; j < 26; j++) d[j] -= m[i][j];
*(r++) = i + 'a';
i = -1;
}
*r = 0;
return ans;
}
int main()
{
char array[1024][3], ans[32];
int len, i, j;
for(; ~scanf("%d\n", &len); puts(fun(array, len, ans)))
for(i = 0; i < len; i++)
scanf(" %c %c %c", &array[i][0], &array[i][1], &array[i][2]);
return 0;
}

2016-12-17 16:03
2016-12-18 13:15
2016-12-19 23:03