@Metralix
2016-10-17T08:01:22.000000Z
字数 572
阅读 1007
这题探究将一个数组中的数置换多少次,可以成一个1~n的全排列。首先数组中超过n的数肯定要被置换,我将其记录为t个。然后将这个数组由小到大排列,那么前n-t个项都是合法的数字,将这些数字遍历一遍,记录其中不同的数为cou,这些数不用置换,后t个数全部置换
那么最终需要置换的数为n-cou。
#include <stdio.h>#include <stdlib.h>int main(){int n,i,cou=0,d=0,j,t=0;int a[5000];scanf("%d",&n);//if(n=1)for(i=0;i<n;i++)scanf("%d",&a[i]);for(i=0;i<n;i++){if(a[i]>n){a[i]=0;t++;}}for(i=0;i<n-1;i++){for(j=i+1;j<n;j++){if(a[i]<a[j]){int temp;temp=a[i];a[i]=a[j];a[j]=temp;}}}for(i=0;i<n-1-t;i++){if(a[i+1]!=a[i]){cou++;}}if(t==n)printf("%d",n-cou);else printf("%d",n-cou-1);return 0;}
