答える必要のある質問は次のとおりです。私のプログラムは、0からn-1までの数値を含むサイズnの配列を取得します。0未満の数値またはn-1を超える数値は取得されないと想定できます。
配列に0からn-1までのすべての数値が含まれているかどうかを確認し、含まれている場合は1を返す必要があります。それ以外の場合は0。
例:
サイズ5の配列:4,1,0,3,2
1を返します。
サイズ5の配列:4,1,0,3,1
0を返します(2は配列にありません)
私がやろうとしたこと:
int Ex4_bonus() //sort a using a single for loop, then iterate through it with another for loop to look
{ // for a spot that doesnt equal the value inside it.
int i,n,boolean=1,temp=0;
int* a;
printf("Enter the size of the array\n");
scanf("%d",&n);
a=input_array_dyn(a,n);
printf("Enter numbers from 0-%d\n",n-1);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n;i++)
{
if(a[i]!=i)
{
temp=a[a[i]];
a[a[i]]=a[i];
a[i]=temp;
}
}
for(i=0;i<n;i++)
if(a[i]!=i)
boolean=0;
printf("%d\n",boolean);
return boolean;
free(a);
}
ただし、一部のアレイでは機能しません。どこが間違っていたのですか?もっと良い方法はありますか?別の配列を使用することは許可されておらず、プログラムはO(n)で実行する必要があります。