回复 8 楼 yejiangnan
一部分吧!
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
int idx=0;
/*
* 加1后进位操作
* 用字符串模拟数字的进位操作
*/
void add_one(int *array, int array_len, int radio, int *flow)
{
int i;
for ( i=array_len-1; i>=0; i-- )
{
array[i] += 1;
//没有进位就退出
if (array[i] < radio) return; else array[i] = 0;
}
// 最高位溢出 - 标志进位操作已经结束
(*flow) = 1;
}
/*
* 获取全排列
*/
int get_pailie(int set[], int set_len, int sub_len, int out_len,int iout[])
{
int end_flag = 0;
int *array = NULL;
int i = 0;
if ( NULL==set || out_len<sub_len ) return -1;
if ( (array=(int *)malloc(sub_len * sizeof(int))) == NULL ) return -2;
// 初始化整数集合为0
for( i=0; i<sub_len; i++ ) array[i] = 0;
while( 1 != end_flag )
{
for(i=0; i<sub_len; i++) iout[i+idx]=set[array[i]];// 输出结果的每一位与它对应的数的每一位相同
idx+=4;
// 下标+1
add_one(array, sub_len, set_len, &end_flag);
}
free(array);
return 0;
}
int main()
{
int set[]={1,-1};
int set_len = 2;
int sub_len = 4;
int iout[64]; //把生成的16组数据保存在一个一维数组中,你以后可以随意调用该数组的
get_pailie(set, set_len, sub_len,sub_len,iout);
//以下是输出这16组数据的示例,当然你也可以干一些其他的相关的事情
for(int i=0;i<64;i++)
{
if(i>0 && i%4==0) printf("\n");
printf("%8d",iout[i]);
}
printf("\n");
return 0;
}

程序代码:#include <stdio.h>
//函数功能:建立16个2*2矩阵的所有数据的总数据表
void getArr64(int a[])
{
int dd[2]={1,-1};
int i,j,k,h,n=0;
for(i=0;i<2;i++)
for(j=0;j<2;j++)
for(k=0;k<2;k++)
for(h=0;h<2;h++)
{
a[n++]=dd[i];
a[n++]=dd[j];
a[n++]=dd[k];
a[n++]=dd[h];
}
}
//函数功能:列出所有矩阵
void putArr64(int a[])
{
int i;
for(i=0;i<64;i++)
{
if(i%4==0)printf("\n");
printf("%4d ",a[i]);
}
printf("\n\n");
}
//函数功能:从总数据表a中,获取第n个2*2矩阵,放入b
void getArr(int a[],int n, int b[][2])
{
int i,*p,*q;
p=a+4*(n-1);
q=*b;
for(i=0;i<4;i++,p++,q++)*q=*p;
}
//函数功能:输出2*2矩阵
void printArr(int a[][2])
{
int i,j;
for(i=0;i<2;i++)
{
for(j=0;j<2;j++)
printf("%4d ",a[i][j]);
printf("\n");
}
printf("\n");
}
int main()
{
int a[64]={0};
int b1[2][2],b2[2][2];
int n;
//建立16个2*2矩阵的所有数据的总数据表
getArr64(a);
//列出所有矩阵
putArr64(a);
//获取第4个矩阵放入b1,并输出
n=4;
printf("第%d个矩阵:\n",n);
getArr(a,n,b1);
printArr(b1);
//获取第7个矩阵放入b2,并输出
n=7;
printf("第%d个矩阵:\n",n);
getArr(a,n,b2);
printArr(b2);
return 0;
}
用比较初级的方法做的。希望对楼主有帮助。