标签:没有 dma clu 输出 print 贪心算法 deb val 语言
1 /* 2 完美的代价:通过交换相邻字符,使原字符串化为回文字符串 。 3 */ 4 #include<stdio.h> 5 #include<stdlib.h> 6 int main(){ 7 int i,j,l,n,k,sum=0,flat=1,c=-1; 8 char *a; 9 scanf("%d",&n); 10 a=(char *)malloc(n*sizeof(char)); 11 scanf("%s",a); 12 j=n-1; 13 //利用贪心的思想,将每个遍历的字符找到后面与他相同的然后交换到正确的位置时所需的交换次数 14 for(i=0;i<j;i++){ 15 for(k=j;k>=i;k--){ 16 if(k==i){//说明没有找到与a[i]相同的字符 17 if(n%2==0||c!=-1){//如果n为偶数或者a[i]不是唯一一个单个无相同字符 18 flat=0; 19 break; 20 } 21 c=1;//n为奇数,将第一个单个的字符a[i]移到中间位置所需的交换次数 22 sum=sum+n/2-i; 23 break; 24 } 25 if(a[k]==a[i]){ 26 for(l=k;l<j;l++){ 27 a[l]=a[l+1]; 28 } 29 a[j]=a[i]; 30 sum=sum+j-k; 31 j--; 32 break; 33 } 34 } 35 if(flat==0){ 36 break; 37 } 38 } 39 if(flat==0) 40 printf("Impossible"); 41 else if(sum==0) 42 printf("0"); 43 else 44 printf("%d\n",sum); 45 return 0; 46 }
标签:没有 dma clu 输出 print 贪心算法 deb val 语言
原文地址:http://www.cnblogs.com/panweiwei/p/6478920.html