我需要这个练习的帮助: 给输入中接收整数n的伪代码并打印所有可能的矩阵nxn,其中a高于b,b高于c。 例如,n = 2 :(顺序并不重要)
输出:
aa aa aa ab ab bb aa aa ac cc bb bb bc bc ab ab ac
aa ab bb ab bb bb ac cc ac cc bc cc bc cc bc cc bc
算法的复杂度为O(n ^ 2 * S(n))。其中S(n)是应该打印的矩阵的数量,n ^ 2是打印时间。 我已经开发了这个代码......但我认为这是错误的......
public class EsercizioNovBT {
public static void main(String[] args) {
int n=2 , i , j;
char[][] m = new char [n][n];
boolean[] isBR = new boolean [n];
boolean[] isBC = new boolean [n];
boolean[] isCR = new boolean [n];
boolean[] isCC = new boolean [n];
boolean[] isAC= new boolean [n];
boolean[] isAR = new boolean [n];
for(i=0;i<n;i++)
isBR[i]=false;
for(i=0;i<n;i++)
isBC[i]=false;
for(i=0;i<n;i++)
isCR[i]=false;
for(i=0;i<n;i++)
isCC[i]=false;
for(i=0;i<n;i++)
isAR[i]=false;
for(i=0;i<n;i++)
isAC[i]=false;
for (i=0 ; i<n ; i++)
for(j=0 ; j<n ;j++)
m[i][j]='d';
i=0;j=0;
scriviSuM(m,isBR,isBC,isCR,isCR,i,j,n);
}
static void scriviSuM(char[][]M , boolean[] isRB,boolean[] isCB,boolean[] isRC,boolean[] isCC,int i, int j , int n)
{
if(i==n)
{
for (int r=0 ; r<n ; r++)
{
for(int c=0 ; c<n ;c++)
{
System.out.print(M[r][c]);
}
System.out.print("\n");
}
System.out.println();
}
else
{
if(j==n)
{
j=0;
scriviSuM(M,isRB,isCB,isRC,isCC,i+1,j,n);
}
else
{
if (! (isRC[i]) && !(isCC[j]))
{
if( ! (isRB[i]) && !(isCB[j]) ) // se non ci sono già delle b allora puoi prendere a
{
M[i][j]='a';
scriviSuM(M,isRB,isCB,isRC,isCC,i,j+1,n);
}
isRB[i]=isCB[j]=true;
M[i][j]='b';
scriviSuM(M,isRB,isCB,isRC,isCC,i,j+1,n);
}
isRC[i]=isCC[j]=true;
M[i][j]='c';
scriviSuM(M,isRB,isCB,isRC,isCC,i,j+1,n);
}
}
}
输出是:
aa
aa
aa
ab baa
ac
aa
bcaa
cc
ab
cc
ac
cc
bc
cc
cc
cc