ambiguous permutations

#include<stdio.h>
int
main(void)
{
int n;
int i = 0;
scanf("%d", &n);
int arr [n];
int A=0;
for(i=0; i<n; i++)
{
scanf("%d", &arr [i]);
}

   for (i=0; i<n; i++)
          {
          if (arr[arr[i]] == i)
          {
                A++;
          }

}
if(A == n)
{
printf(“ambiguous!”);
}
else {printf(“not ambiguous”);}
}

this is not giving proper output. Can you help me find the error?

range of n is from 1 to 100000. You are testing zero and missing 100000. try this

int main(void)
{
int n;
int i = 1;
scanf("%d", &n);
int arr [100002];
int A=0;
for(i=1; i<=n; i++) { scanf("%d", &arr [i]); }
for(i=1;i<=n;i++)
if(arr[arr[i]]==i)
A++;
return 0;
}

hope it helps :slight_smile:

The reason your code does not produce correct output is because the indexing of the array is 0-based, but the indexing of the permutation in the question is 1-based. For eg. the ith element of the permutation will be at the (i-1)th index in the array. The following code will suffice in this case: ideone.com/0rETn2

P.S- You need to remove the exclamation mark from “ambigous!” and put a ‘\n’ chararcter after each outut to get a write answer :slight_smile: