一種排列組合問題

【問題描述】從含有N個元素的序列AA中選取元素組成含有M個元素的序列BB。例如{1,2,3}可以組成多少個8位數。

/*
 * 枚舉從任意多的N種元素中選出M個組成新的排列(M>N)
 * 例如:{-1,0,1}→{1,0,-1,0,0,1,1,-1}
 */
#include <stdio.h>
#include <math.h>

#define ROW 6561 // 行 3^8=6561
#define COL 8 	 // 列
#define NUM 3    // 元素個數

int main(int argc, char *argv[])
{
	int row = 0; //行數
	int col = 0; //列數
	int num = 0; //元素個數
	int idx = 0; //每一列內的循環變量
	int step = 0; // 每一列內的循環步長
	int delta = 0; // 每一列內單個元素的循環增量
	
	
	int src[NUM] = {1,2,3};  // 待選取的元素
	
	int com[ROW][COL] = {0}; // ROW*COL 行*列,存放所有結果
	
	for(num=0;num<NUM;num++) // 輸出列
	{
		printf("src[%d] = %d \t", col, src[col]);
	}
	printf("\r\n");

	for(col=0;col<COL;col++)
	{
		delta = (int)pow(NUM,col);
		step = NUM*delta;

		for(row=0;row<ROW;row++)  // 行
		{
			if(row%step==0)
			{
				for(idx=0;idx<step;idx++)
				{
					com[row+idx][COL-col-1] = src[idx/delta];
				}
			}
		}
		
	}
	
	// 輸出結果
	for(row=0;row<ROW;row++) 
	{
		for(col=0;col<COL;col++) // 輸出列
		{
			printf("com[%d][%d] = %d \t", row, col, com[row][col]);
		}
		printf("\r\n");
	}
	
	return 0;
}

【挖坑】x+y+z=8x+y+z=8的共有多少個整數解?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章