全排列应用问题

    前几天碰到一个算法问题,涉及到全排列。刚好也想温习一下算法,所以就写出来,意思意思。

题目大致是这样的:

    有9个数字,分成3组,每组中的三位数分别构成一个数,使得这三个数的比例为1:2:3。

    问:有多少组这样的数,分别打印出来。

    上代码:大笑大笑

#include "stdio.h"
#include "stdlib.h"

int count(int i);  //判断9个数中各自扩大的倍数
void swap(int a[], int n, int m);//交换两个元素
void arrange(int a[], int st, int len);//排序方法的实现

int total=1;
int array[9] = { 0 };
int num = 1;

int count(int i) 
{
	if (i % 3 == 0)
	{
		return 1;
	}		
	if (i % 3 == 1)
	{
		return 100;
	}		
	else
	{
		return 10;
	}
	
}

void swap(int a[], int n, int m) //交换数组中对应位置的数据
{
	int temp;
	temp = a[n];
	a[n] = a[m];
	a[m] = temp;
}

void arrange(int a[], int st, int len) 
{
	if (st == len - 1) {
		int i;
		for (i = 0; i<len; ++i) //将三组中的每个数分别乘以100,10,1
		{
			array[i] = a[i] * count(num);
			num++;
		}
		for (i = 0; i<7; i = i + 3) //判断三个数是否成1:2:3关系,是,则输出
		{
			array[i]+ = array[i]+array[i+1]+array[i+2];
			if (((array[0] * 2) == array[3]) && ((array[0] * 3) == array[6])) 
			{
				printf("%d,%d,%d", array[0], array[3], array[6]);
				printf("\n");
			}
		}
		total++;
	}
	else 
	{
		for (int i = st; i<len; i++) 		
		{
			swap(a, st, i);
			arrange(a, st + 1, len);
			swap(a, st, i);
		}
	}
}
int main() 
{	
	int a[] = { 1,2,3,4,5,6,7,8,9 };
	printf("排列结果:\n");
	arrange(a, 0, 9);
	printf("排列组合数%d\n", total);
	printf("Hello World\n");			
	system("pause");
	return 0;
}

 

具体的内容在注释里面都有,主要就是一个全排列算法的应用(没有涉及到排列中重复元素的问题)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值