Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Answer : 42
I went straightaway for the brute force approach. I
first found a c program to print all the permutations of
a given set of numbers from:
http://c-program-example.com/2012/05/c-program-to-
print-all-the-possible-permutations-of-given-
digits.html
This is my code:-
#include <stdio.h>
#include<stdlib.h>
int main()
{
int x, y, z, count=0,flag;
permutation();
for(x=0;x<362880;x++)
{
for(y=0;y<3;y++)
{
for(z=0;z<3;z++)
{
if(y>0 && z>0)
{
if(arr[x][y][z]>arr[x][y-1][z] &&
arr[x][y][z]>arr[x][y][z-1])
{
flag=1;
}
else
{
flag=0;
break;
}
}
else if(y==0 && z!=0)
{
if(arr[x][y][z]>arr[x][y][z-1])
{
flag=1;
}
else
{
flag=0;
break;
}
}
printf("\n%d\n", count);
int permutation()
{
int i,j;
printf("\nEnter how many numbers: ");
scanf("%d",&n);
printf("\nEnter %d numbers: ",n);
for(i=0;i<n;i++)
{
val[i]=0;
j=i+1;
scanf("%dnn",&a[j]);
}
visit(0);
getchar();
return 0;
}
void visit(int k)
{
int i,b,c;
static int d=0;
val[k]=++lev;
if(lev==n)
{
for(i=0;i<n;i++)
{
if(i==0)
{
b=0;
c=0;
arr[d][b][c]=a[val[i]];
}
else if(i==1)
{
b=0;
c=1;
arr[d][b][c]=a[val[i]];
}
else if(i==2)
{
b=0;
c=2;
arr[d][b][c]=a[val[i]];
}
else if(i==3)
{
b=1;
c=0;
arr[d][b][c]=a[val[i]];
}
else if(i==4)
{
b=1;
c=1;
arr[d][b][c]=a[val[i]];
}
else if(i==5)
{
b=1;
c=2;
arr[d][b][c]=a[val[i]];
}
else if(i==6)
{
b=2;
c=0;
arr[d][b][c]=a[val[i]];
}
else if(i==7)
{
b=2;
c=1;
arr[d][b][c]=a[val[i]];
}
else if(i==8)
{
b=2;
c=2;
arr[d][b][c]=a[val[i]];
}
}
d++;
}
for(i=0;i<n;i++)
if(val[i]==0)
visit(i);
lev--;
val[k]=0;
}
***