一个5X5的二维数组,每行元素都是1-5不重复的排列,求所有满足以上条件的数组。
展开全部
以下是帮你写的c++程序,针对4*4数组,要运行好几分钟:
#include<iostream>
#include<fstream>
#define N 4
using namespace std;
int main(){
bool f1(int*);
ofstream fout("out.dat",ios::out); //输出文哪贺租件:out.dat,用于保存数组信拍中息
int a[5][5];
int t,k,i,j,c[5],d[5],e[5],f[5];
k=0;
for(c[0]=1;c[0]<N+1;c[0]++)
for(c[1]=1;c[1]<N+1;c[1]++)
for(c[2]=1;c[2]<N+1;c[2]++)
for(c[3]=1;c[3]<N+1;c[3]++)
if(!f1(c))
{
for(t=0;t<4;t++)
a[0][t]=c[t];
for(d[0]=1;d[0]<N+1;d[0]++)
for(d[1]=1;d[1]<N+1;d[1]++)
for(d[2]=1;d[2]<N+1;d[2]++)
for(d[3]=1;d[3]<N+1;d[3]++)
if(!f1(d))
{
for(t=0;t<4;t++)
a[1][t]=d[t];
for(e[0]=1;e[0]<N+1;e[0]++)
for(e[1]=1;e[1]<N+1;e[1]++)
for(e[2]=1;e[2]<N+1;e[2]++)
for(e[3]=1;e[3]<N+1;e[3]++)
if(!f1(e))
{
for(t=0;t<4;t++)
a[2][t]=e[t];
for(f[0]=1;f[0]<N+1;f[0]++)
for(f[1]=1;f[1]<N+1;f[1]++)
for(f[2]=1;f[2]<N+1;f[2]++)
for(f[3]=1;f[3]<N+1;f[3]++)
if(!f1(f))
{
for(t=0;t<4;t++)
a[3][t]=f[t];
k++;
cout<<k<<endl; //计数
for (i=0;i<4;i++) //逐个输出数组元素a[i][j]
for(j=0;j<4;j++)
fout<<a[i][j]<<",";
fout<<李兆endl;
}
}
}
}
return(0);
}
bool f1(int*b) //不重复判断函数
{bool k=0;
for(int i=0;i<4;i++)
for(int j=i+1;j<5;j++)
if(b[i]==b[j])
{k=1;
break;
}
return k;}
#include<iostream>
#include<fstream>
#define N 4
using namespace std;
int main(){
bool f1(int*);
ofstream fout("out.dat",ios::out); //输出文哪贺租件:out.dat,用于保存数组信拍中息
int a[5][5];
int t,k,i,j,c[5],d[5],e[5],f[5];
k=0;
for(c[0]=1;c[0]<N+1;c[0]++)
for(c[1]=1;c[1]<N+1;c[1]++)
for(c[2]=1;c[2]<N+1;c[2]++)
for(c[3]=1;c[3]<N+1;c[3]++)
if(!f1(c))
{
for(t=0;t<4;t++)
a[0][t]=c[t];
for(d[0]=1;d[0]<N+1;d[0]++)
for(d[1]=1;d[1]<N+1;d[1]++)
for(d[2]=1;d[2]<N+1;d[2]++)
for(d[3]=1;d[3]<N+1;d[3]++)
if(!f1(d))
{
for(t=0;t<4;t++)
a[1][t]=d[t];
for(e[0]=1;e[0]<N+1;e[0]++)
for(e[1]=1;e[1]<N+1;e[1]++)
for(e[2]=1;e[2]<N+1;e[2]++)
for(e[3]=1;e[3]<N+1;e[3]++)
if(!f1(e))
{
for(t=0;t<4;t++)
a[2][t]=e[t];
for(f[0]=1;f[0]<N+1;f[0]++)
for(f[1]=1;f[1]<N+1;f[1]++)
for(f[2]=1;f[2]<N+1;f[2]++)
for(f[3]=1;f[3]<N+1;f[3]++)
if(!f1(f))
{
for(t=0;t<4;t++)
a[3][t]=f[t];
k++;
cout<<k<<endl; //计数
for (i=0;i<4;i++) //逐个输出数组元素a[i][j]
for(j=0;j<4;j++)
fout<<a[i][j]<<",";
fout<<李兆endl;
}
}
}
}
return(0);
}
bool f1(int*b) //不重复判断函数
{bool k=0;
for(int i=0;i<4;i++)
for(int j=i+1;j<5;j++)
if(b[i]==b[j])
{k=1;
break;
}
return k;}
展开全部
第一行与第二行可以一样吗?第一行有120种排列可以。如果漏兆锋各行可以重复,总共有120的五次方个数组,如果各行返晌不重复,有120*119*118*117*116个数组。你想把这些数组打印到你的屏幕上吗
?还是保存猜举到文件中?
?还是保存猜举到文件中?
追问
可以一样的,就是120^5种结果,我主要是想知道如何填充能把所有的排列弄出来而不会漏掉。最好能保存到文件中,因为我还要对结果进行筛选。如果数字过大,改成4X4的数组,每行1-4的排列也行,那样就是24^4 种。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询