码迷,mamicode.com
首页 > 其他好文 > 详细

洗牌(包括case)

时间:2017-01-22 12:35:22      阅读:208      评论:0      收藏:0      [点我收藏+]

标签: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

洗牌(包括case)

标签:iostream   define   pac   oid   while   cin   shu   ++   return   

原文地址:http://www.cnblogs.com/jintg/p/6339765.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!