(WA) Here is my code in C, could anyone give me some test cases to break it please?
/*
Prog: acm_1054
results:
*/
#include <stdio.h>
#include <math.h>
int a = 1,b = 2,c = 4;
int disks[5];
int numbers[5][101];
int dest[5][101];
int destdisks[5];
int count;
int found;
int num;
int finish()
{
int i,j;
found = 1;
for(i = 1;i<5;i++)
{
for(j = 0;j<=num;j++)
{
if(numbers[i][j]!=dest[i][j])
{
found = 0;
break;
}
}
if(!found)
break;
}
if(found)return 1;
if(disks[b]==num)
return 1;
return 0;
}
void move(int s,int n, int d)
{
int k ;
if(found||finish())return;
if(n==1)
{
disks[d]++;
numbers[d][disks[d]] = numbers[s][disks[s]];
numbers[s][disks[s]] = 0;
disks[s]--;
count++;
}else {
k = 7^(s|d);
move(s,n-1,k);
move(s,1,d);
move(k,n-1,d);
finish();
}
}
int main(int argc, char *argv[]) {
int pos[100],i,j;
int tmp[101];
scanf("%d",&num);
disks[a] = num;
for(i = 0;i<num;i++)
numbers[a][i+1] = num-i;
for(i = 1;i<=num;i++)
{
scanf("%d",&pos[i]);
pos[i] =(int)pow(2,pos[i]-1);
destdisks[pos[i]]++;
dest[pos[i]][destdisks[pos[i]]] = i;
}
for(i = 1;i<5;i++)
{
for(j = 1;j<=destdisks[i];j++)
tmp[destdisks[i]-j+1] = dest[i][j];
for(j = 1;j<=destdisks[i];j++)
dest[i][j] = tmp[j];
}
move(a,num,b);
if(found)
printf("%d",count);
else printf("%d",-1);
return 0;
}
// Cheers!