gpt4 book ai didi

C程序打印3个字母单词的组合

转载 作者:行者123 更新时间:2023-11-30 15:37:11 25 4
gpt4 key购买 nike

我想在 C 编程中不使用嵌套 for 循环来打印任意 3 个字母的组合?

以下是3个字母“ABC”的组合代码。我可以使用 3 个 for 循环来执行该程序。但我不想那样。我只想通过一个 for 循环并以一种非递归的方式来完成它。但我没有得到任何逻辑。

#include <stdio.h>
#include <stdlib.h>

int main()
{

int i=0,j=0;
char b[10],a[] = "ABC";
strcpy(b,a);
while(i < 3)
{
b[j]=a[i];

if(i==0)
{
b[j+1]=a[i+1];
b[j+2]=a[i+2];
printf("\n%s",b);

b[j+1]=a[i+2];
b[j+2]=a[i+1];
printf("\n%s",b);

}else if(i==1)
{
b[j+1]=a[i+1];
b[j+2]=a[i-1];
printf("\n%s",b);

b[j+1]=a[i-1];
b[j+2]=a[i+1];
printf("\n%s",b);

}else
{
b[j+1]=a[i-1];
b[j+2]=a[i-2];
printf("\n%s",b);

b[j+1]=a[i-2];
b[j+2]=a[i-1];
printf("\n%s",b);
}

i++;

}

getch();
return 0;
}

最佳答案

如果您知道它的长度始终为三,则可以使用预生成来最大程度地减少复杂性和/或代码。预生成是将复杂计算从运行时移动到编译时甚至事先移动的行为,对于复杂计算来说它非常高效。

一个示例(尽管有点做作)是编写一个程序来计算所有可能的无符号 64 位阶乘(大约只有 90 个),然后让该程序生成源代码(查找表和函数)可以进行查找来获取它们。生成表的复杂性是在编译将使用它的程序之前一次完成的。

这意味着使用它的程序中的阶乘运算,从可能耗时的一系列乘法变为更类似于一次乘法和加法(表查找)。

将相同的方法应用于排列(尽管查找表的生成是在我的脑海中完成的,因为它并不那么复杂)将为您提供如下代码:

#include <stdio.h>

// The permutations.

static int perm3[] = { 0,1,2, 0,2,1,
1,0,2, 1,2,0,
2,0,1, 2,1,0 };

int main (void) {
int i;
char x[] = {'a', 'b', 'c'};

// Permute using the table to get indexes.

for (i = 0; i < sizeof(perm3) / sizeof(perm3[0]); i += 3)
printf ("%c %c %c\n", x[perm3[i]], x[perm3[i+1]], x[perm3[i+2]]);

return 0;
}

现在,有些人可能会认为这是“作弊”,但我在这里说实话,您可以编写的一些最快的程序将以这种方式作弊:-)

关于C程序打印3个字母单词的组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22293043/

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