标签:iostream define pac oid while cin shu ++ return
1 #include <iostream> 2 using namespace std; 3 #define SIZE 12 4 int data[SIZE]; 5 int data1[SIZE]; 6 int n; 7 int minstep; 8 void xipai(int m); 9 bool shun(); 10 void dfs(int step); 11 int main() 12 { 13 freopen("in.txt","r",stdin); 14 minstep=6; 15 while(scanf("%d",&n)!=EOF) 16 { 17 minstep=6; 18 for(int i=0;i<n;i++) 19 { 20 cin >>data[i]; 21 data1[i]=data[i]; 22 } 23 dfs(0); 24 if(minstep==6) 25 minstep=-1; 26 cout <<minstep<<endl; 27 } 28 return 0; 29 } 30 void xipai(int m) 31 { 32 int data2[SIZE]; 33 for(int i=0;i<n;i++) 34 data2[i]=data1[i]; 35 int j=0; 36 for(int i=m;i>0;i--) 37 { 38 if(i>n/2) 39 { 40 data2[n/2-j-1+n/2]=data1[n/2-j-1]; 41 data2[n/2+j-n/2]=data1[n/2+j]; 42 } 43 else 44 { 45 data2[n/2-j-1+i]=data1[n/2-j-1]; 46 data2[n/2+j-i]=data1[n/2+j]; 47 } 48 j++; 49 if(j>n/2-1) 50 break; 51 } 52 for(int i=0;i<n;i++) 53 data1[i]=data2[i]; 54 } 55 bool shun() 56 { 57 if(data1[0]<data1[1]) 58 { 59 for(int i=0;i<n-1;i++) 60 { 61 if(data1[i]>data1[i+1]) 62 return false; 63 } 64 } 65 if(data1[0]>data1[1]) 66 { 67 for(int i=0;i<n-1;i++) 68 { 69 if(data1[i]<data1[i+1]) 70 return false; 71 } 72 } 73 return true; 74 } 75 void dfs(int step) 76 { 77 if(shun()) 78 { 79 if(step<minstep) 80 minstep=step; 81 return; 82 } 83 if(step==5) 84 return; 85 int temp[SIZE]; 86 for(int i=0;i<n;i++) 87 temp[i]=data1[i]; 88 for(int i=0;i<n;i++) 89 { 90 xipai(i); 91 dfs(step+1); 92 for(int j=0;j<n;j++) 93 data1[j]=temp[j]; 94 } 95 }
case:
4
1 2 3 4
4
4 2 3 1
6
6 5 4 2 3 1
8
6 1 4 7 2 5 8 3
12
2 7 4 1 3 5 8 10 12 9 6 11
标签:iostream define pac oid while cin shu ++ return
原文地址:http://www.cnblogs.com/jintg/p/6339765.html