回复 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; }用比较初级的方法做的。希望对楼主有帮助。