当前位置: 首页 > 知识库问答 >
问题:

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

步弘和
2023-03-14

我有用于搜索字符数组唯一元素的代码。但它工作不正确。例如,在“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 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”,则会缺少更多变体。

共有1个答案

栾鸣
2023-03-14

此代码应该可以解决问题:

#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);
}

输出:

AB AC AD BC BD CD ABC ABD ACD BCD ABCD

并且还为“ABCDE”等工作。

 类似资料:
  • 问题内容: 在最近的一次采访中有人问我这个问题。 您将获得一个包含一百万个元素的数组。除了一个元素外,所有元素都是重复的。我的任务是找到独特的元素。 我的做法是要经过在整个数组循环,然后创建一个索引作为数组中和的数组中出现的次数。然后再次遍历我们的地图,并返回值为1的索引。 我说我的方法会花费时间。面试官告诉我要以低于复杂度的方式对其进行优化。我说过,我们不能,因为我们必须遍历具有一百万个元素的整

  • 问题内容: 整数数组包含一些元素,以使每个元素比其前一个元素多1个或小于1个。现在给了一个数字,我们需要确定该数字在数组中首次出现的索引。需要优化线性搜索。它不是功课。 问题答案: 我的算法是这样的: p = 0 如果(A [p] == x)则idx = p并且算法完成,否则转到下一步 设置p + = | xA [p] | 转到2。 说A [p]> x。然后,由于A项增加或减少1,因此idx至少可

  • 问题内容: 如何在上面的数组中松散搜索“ Last”一词? 上面的代码仅在指针与值中的所有内容完全匹配时才回显值的键,这是我不想要的。我想要这样的东西: 如果值包含单词“ Last”,我希望值的键回显。 问题答案: 要查找符合搜索条件的值,可以使用函数: 现在,数组将仅包含原始数组中包含单词 last (不区分大小写)的元素。 如果需要查找与条件匹配的值的键,则需要遍历数组: 现在,数组包含原始数

  • 我正在写一个程序来跟踪学校的班级和学生。我有学校、教室和学生用品。学校包含教室对象的ArrayList,每个教室包含学生对象的ArrayList。 我试图在学校类中编写一个方法,使用字符串名称和字符串classroomName作为参数来删除学生。 这就是我到目前为止所做的: 我认为这不起作用,因为学生对象的ArrayList是在课堂上声明的。 是否有一种方法可以通过对象ArrayList搜索使用非

  • 我有一个结构片。 以下是此文件的输出: 如何搜索此数组以获取所在的元素?

  • 问题内容: 我正在尝试通过一个简单的示例应用程序学习Elasticsearch,该应用程序列出了与人相关的报价。映射示例如下所示: 一些示例数据可能看起来像: 我希望能够对单个引用使用querystring api,并返回匹配的人。例如,我可能想查找报价包含(此与这些)的人-应该返回“ A先生”而不是“ B先生”,依此类推。我该如何实现? 编辑1: 安德烈(Andrei)在下面的回答似乎可行,数据