在生成特定的顺序组合

编程入门 行业动态 更新时间:2024-10-14 06:23:51
本文介绍了在生成特定的顺序组合的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我需要一个函数来生成一个严格的顺序组合。 这里有一个例子:

{0,1,2,3}:

0 2 1 3 0 1 3 2 0 2 1 3 0 2 3 1 0 3 1 2 0 3 2 1 1 0 2 3 1 0 3 2 1 2 0 3 1 2 3 0 1 3 0 2 1 3 2 0 2 0 1 3 2 0 3 1 2 1 0 3 2 1 3 0 2 3 0 1 2 3 1 0 3 0 1 2 3 0 2 1 3 1 0 2 3 1 2 0 3 2 0 1 3 2 1 0

所以,我需要这个特定的顺序,没有任何other.I已经尝试了一些硬code步骤猜测算法,但有一个现有的功能,可以为我做的?

更新:

的#include< stdio.h中> #包括< string.h中> INT主要(无效) { 炭键[] = {'0','1','2','3','\ 0',}; 炭缓冲[] = {'0','1','2','3','\ 0',}; 的printf(%S \ N键); 交换(安培;键[2],&安培;按键[3]); 的printf(%S \ N键); strcpy_s(键,的sizeof(缓冲区),缓冲区); 交换(安培;键[1],&安培;键[2]); 的printf(%S \ N键); 交换(安培;键[2],&安培;按键[3]); 的printf(%S \ N键); strcpy_s(键,的sizeof(缓冲区),缓冲区); 交换(安培;键[1],&安培;按键[3]); 交换(安培;键[2],&安培;按键[3]); 的printf(%S \ N键); 交换(安培;键[2],&安培;按键[3]); 的printf(%S \ N键); } 无效掉期(字符* X,字符* Y) { 焦炭TMP; TMP = * X; * X = * Y; * Y = TMP; }

解决方案

我给你的算法,我曾经读过。 (一些网站)

  • 最初,排序的元素,以获得的最小排列。
  • 从右边开始,并保持向左移动,只要字母增加值让它成为X
  • 在后面的x查找大于x序列中较大的最小值X ..s ..,并用X掉它。 (让它成为S)。 (那么这将是S ..x ..)
  • 在这样做之后,反向超越S中的字母。

这就是你现在执行的算法。

假设你有拿到1 3 4 2下一个置换 +步骤2: 1 3 4 2   | +步骤3: 1 3 4 2(4大于3)   | | 1 4 3 2 +步骤-4- 扭转它 1 4 3 2 ----> 1 4 2 3    | - |

I need a function to generate combinations in a strict order. here's an example :

{0,1,2,3} :

0 1 2 3 0 1 3 2 0 2 1 3 0 2 3 1 0 3 1 2 0 3 2 1 1 0 2 3 1 0 3 2 1 2 0 3 1 2 3 0 1 3 0 2 1 3 2 0 2 0 1 3 2 0 3 1 2 1 0 3 2 1 3 0 2 3 0 1 2 3 1 0 3 0 1 2 3 0 2 1 3 1 0 2 3 1 2 0 3 2 0 1 3 2 1 0

So,I need This particular order,not any other.I have tried a few hard-code steps to guess the algorithm,but is there an existing function that can do it for me?

UPDATE:

#include <stdio.h> #include <string.h> int main(void) { char keys[] = {'0','1','2','3','\0',}; char buffer[] = {'0','1','2','3','\0',}; printf("%s\n",keys); Swap(&keys[2],&keys[3]); printf("%s\n",keys); strcpy_s(keys,sizeof(buffer),buffer); Swap(&keys[1],&keys[2]); printf("%s\n",keys); Swap(&keys[2],&keys[3]); printf("%s\n",keys); strcpy_s(keys,sizeof(buffer),buffer); Swap(&keys[1],&keys[3]); Swap(&keys[2] ,&keys[3]); printf("%s\n",keys); Swap(&keys[2],&keys[3]); printf("%s\n",keys); } void Swap(char *x,char *y) { char tmp; tmp = *x; *x = *y; *y = tmp; }

解决方案

I am giving you the algorithm I once read. (from some site)

  • Initially, sort the elements to obtain the minimum permutation.
  • Begin from the right and keep moving left as long as the letters are increasing in value let it be x
  • Find the smallest value bigger than x in the sequence "x ..s.." after x and swap it with x. (let it be s). (then it will be "s ..x..")
  • Having done this, reverse the letters beyond s.

This is the algorithm that you have to implement now.

Suppose you have to get the next permutation of 1 3 4 2 + Step-2: 1 3 4 2 | + step-3: 1 3 4 2 (4 greater than 3 ) | | 1 4 3 2 + step-4 reverse it 1 4 3 2 ----> 1 4 2 3 |--|

更多推荐

在生成特定的顺序组合

本文发布于:2023-11-30 13:56:38,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1650234.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:组合   顺序

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!