【问题描述】从含有N个元素的序列 A A A中选取元素组成含有M个元素的序列 B B B。例如{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 = 8 x+y+z=8 x+y+z=8的共有多少个整数解?