gpt4 book ai didi

c - 在 C 中搜索唯一元素组合的算法(结果字符串中的元素位置无关紧要)

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:04:45 25 4
gpt4 key购买 nike

我有搜索字符数组唯一元素的代码。但它工作不正确。例如,如果是“ABCD”数组,我会丢失“ABD”大小写。我该如何解决?

#include <stdio.h>
#include <string.h>

void fun(char *str, int size, int depth)
{
int i = 0;
int j = 0;
int k = 0;
while (i < size - depth + 1)
{
j = i + 1;
while (j < size - depth + 2)
{
printf("%c", str[i]);
k = j;
while (k < j + depth - 1)
{
printf("%c", str[k]);
k++;
}
printf("\n");
j++;
}
i++;
}
}

int main(void)
{
char *str = "ABCD";
int i = 0;
while (i < strlen(str))
{
fun(str, strlen(str), i + 1);
i++;
}
return (0);
}

结果是:A A A A B B B C D AB AC AD BC BD CD ABC ACD BCD ABCD

我需要:A B C D AB AC AD BC BD CD ABC ABD ACD BCD ABCD

如您所见,存在多个错误 - 开头重复单个字符且缺少 ABD 大小写。如果字符串是“ABCDE”,则将缺少更多变体。

最佳答案

这段代码应该可以解决问题:

#include <string.h>
#include <stdio.h>

void fun(char *str, char *data, int start, int end, int idx, int depth)
{
if (idx == depth)
{
for (int j = 0; j < depth; j++)
printf("%c", data[j]);
printf("\n");
return;
}
for (int i = start; i <= end && end - i + 1 >= depth - idx; i++)
{
data[idx] = str[i];
fun(str, data, i + 1, end, idx + 1, depth);
}
}

int main()
{
char *str = "ABCD";
int i = 0;

while (i < strlen(str))
{
char data[i + 1];
fun(str, data, 0, strlen(str) - 1, 0, i + 1);
i++;
}
return (0);
}

输出:

一个乙C丁AB空调广告公元前蓝光光盘美国广播公司ABD自动CDBCDABCD

也适用于“ABCDE”等。

关于c - 在 C 中搜索唯一元素组合的算法(结果字符串中的元素位置无关紧要),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48010409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com