UVA120Stacks of Flapjacks
纠结了好几个小时 不明白哪错了 跟别人的代码仔仔细细的对照才发现题目要求把原来的数据再输出一遍 石化。。
选择排序的思想 每次找到最大的那个数将它放在该放的位置
输入用字符串 再转化成数字
UVA就是麻烦 来来回回的逆转 都转晕了
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include<string.h> 4 int n ; 5 void deal(char *s,int *a) 6 { 7 int begin,end,len=strlen(s); 8 n=0; 9 begin=0; 10 end=begin; 11 while(end<len) 12 { 13 while(s[end]!=' '&&s[end]!=0) 14 end++; 15 int t=0; 16 while(begin<end) 17 { 18 t*=10; 19 t+=s[begin]-'0'; 20 begin++; 21 } 22 n++;a[n]=t; 23 begin=end+1; 24 end=begin; 25 } 26 } 27 int main() 28 { 29 int i, j, p[65],x[65],r[165],g, t, k, m,a[65]; 30 char c[60]; 31 while(gets(c)!=NULL) 32 { 33 deal(c,p); 34 for(i = 1 ; i <= n ; i++) 35 { 36 if(i!=1) 37 printf(" "); 38 printf("%d", p[i]); 39 } 40 puts(""); 41 for(i = 1;i <= n;i++) 42 { 43 x[n-i+1]=p[i]; 44 } 45 g = 0; 46 for(i = 1 ; i < n ; i++) 47 { 48 int max = 0; 49 for(j = i ; j <= n ; j++) 50 if(max<x[j]) 51 { 52 max = x[j]; 53 k = j; 54 } 55 if(k!=i) 56 { 57 if(k!=n) 58 { 59 r[g++] = k; 60 int begin=k,end=n; 61 while(begin<=end) 62 { 63 t=x[begin]; 64 x[begin]=x[end]; 65 x[end]=t; 66 begin++; 67 end--; 68 } 69 } 70 r[g++] = i; 71 int begin=i,end=n; 72 while(begin<=end) 73 { 74 t=x[begin]; 75 x[begin]=x[end]; 76 x[end]=t; 77 begin++; 78 end--; 79 } 80 } 81 } 82 for(i = 0 ; i < g ; i++) 83 printf("%d ", r[i]); 84 printf("0\n"); 85 } 86 return 0; 87 }