洗牌(包括case)

 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

时间: 2024-08-10 10:40:21

洗牌(包括case)的相关文章

[转]完美洗牌(Perfect Shuffle)问题

[转]原博文地址:https://github.com/julycoding/The-Art-Of-Programming-By-July/blob/master/ebook/zh/02.09.md 完美洗牌算法 题目详情 有个长度为2n的数组{a1,a2,a3,...,an,b1,b2,b3,...,bn},希望排序后{a1,b1,a2,b2,....,an,bn},请考虑有无时间复杂度o(n),空间复杂度0(1)的解法. 题目来源:此题是去年2013年UC的校招笔试题,看似简单,按照题目所要

AS3.0 扑克牌乱序排列法洗牌

package { /* *@ClassName:package::PokerMain *@Intro:这是一个初始化1-52扑克牌,然后进行乱序排列进行洗牌: *@Author:非若 *@Date:2015.07.22 *@LanguageVersion:ActionScript 3.0 * */ import flash.display.Sprite; public class PokerMain extends Sprite { //设置扑克牌总数 private var NUM:Numb

手机行业洗牌 大佬们就该欣喜若狂?

目前,国内手机行业形势之错综复杂,已经达到顶峰:层出不穷的新品牌.不断入局的互联网及其他企业.数千种机型构成机海.发展战略不断更迭.口水大战此起彼伏--而除了这些明面上的表象以外,其他竞争更是暗流涌动.然而,随着国内手机市场增速放缓.销量下滑,这些乱象都有望得到缓解,甚至消失无迹. 这是因为随着国内手机市场的饱和,必然会有部分手机销售低迷.而随着竞争的残酷,手机厂商只有真正通过整合产业链并不断创新,才能存活下来.但若是大品牌自以为在这场洗牌大战中可以高枕无忧,甚至肆意而为,却并不尽然.  销量.

随机算法之30万员工抽取10万员工(洗牌算法)

算法方面不是我的强项,所以遇到这个问题,记录一下解决方法: 最开始的时候,做法是从random中来随机选取一个,然后再判断已有列表中是否存在, 然后以此重复,看到这里,会算法的同学肯定会说这明显不行:就好比多少人中生日为一天的概率大于50%: 所以然后查找了一些资料,看到了洗牌算法:包括多种变种吧. 这里说一下我参考的解决办法: 比如有30万个元素的列表,那么第一次随机选择一个:记录位置是x: 然后把元素的最后一个位置元素存入位置x,然后把最后位置的元素删除: (这里在交换的时候,需要判断这个元

百度插手上门推拿,行业洗牌再开启

上门推拿刚刚兴起之际,很多人认为这个不太可能实现,场景限制.安全风险等因素将制约上门推拿的发展,即便是一些传统的线下按摩足疗从业者也赞同这个观点.然而上门推拿发展到今天,却已经得到了众多用户的逐渐认可与接受,正应了那句话:市场是需要教育的! 日前,刘旷从百度内部了解到的独家消息:在O2O领域动作频频的互联网巨头百度突然又悄悄进军上门推拿,这对于整个上门推拿行业来说可谓是地震般的事件.百度独家与上门推拿平台宜生到家达成战略合作,百度将为宜生到家提供包括搜索.首页BANNER.百度搜索唯一答案.百度

PAT自测_打印沙漏、素数对猜想、数组元素循环右移、数字加倍重排、机器洗牌

00-自测1. 打印沙漏(20) 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个“*”,要求按下列格式打印 ***** *** * *** ***** 所谓“沙漏形状”,是指每行输出奇数个符号:各行符号中心对齐:相邻两行符号数差2:符号数先从大到小顺序递减到1,再从小到大顺序递增:首尾符号数相等. 给定任意N个符号,不一定能正好组成一个沙漏.要求打印出的沙漏能用掉尽可能多的符号. 输入格式: 输入在一行给出1个正整数N(<=1000)和一个符号,中间以空格分隔. 输出格式: 首先

家电市场洗牌,快鱼吃慢鱼大势所趋

珠三角劳动密集型产业正面临越来越严峻的挑战.4月14日凌晨,格兰仕中山工厂发生员工打砸事件,据说此事源于格兰仕中山工厂员工不满工资低于承诺标准所致.此事件发生之后,业界开始关注格兰仕的发展状况,并借此找出中国制造所面临的挑战和难题. 如果说这属于"内忧"的话,格兰仕也面临着更严重的"外患",根据海关数据显示,从2011年起,格兰仕原本第一的市场地位就被美的所超越.据统计,2013年美的出口量为1922万台,超过格兰仕近200万台,出口额为85687万美元,超过格兰仕

JAVA程序设计(11)-----面对对象0基础设计 麻将 创建麻将牌 然后洗牌 发牌~ 恩 就这样

zzzzZZZZ 1.開始还想贴图的 实在太懒了-- 这是一张麻将 package com.lovo; import java.awt.Graphics; import java.awt.Image; /** * 类 : 麻将牌 * @author Abe 属性:花色 点数 图片 */ public class Mahjong { private Suits suits; private int face; private Image image; /** * 构造器 * * @param su

楼市“冰火两重天” 房产税2017年征收或加剧洗牌

楼市“冰火两重天” 房产税2017年征收或加剧洗牌 行业动态中国广播网[微博]马尚田2014-11-04 07:25 我要分享 0 [导读]别看房企买地热闹,挥金如土,可都是扎堆一线城市,不要忘了众多的三四线城市正艰难度日,有房子没人买,门前冷落车马稀.一个人半边身子冷,半边身子热,恐怕是打摆子的前兆. 据经济之声<天下财经>报道,今晨媒体观察,今日关键词:不差钱儿.在资本市场,我看至少有四种不差钱儿:一种是冰火两重天,如房地产市场:一种是躺着数钱,如银行业:一种方兴未艾,如互联网金融:一种明

【转】完美洗牌算法

转自:https://yq.aliyun.com/articles/3575 题目 有个长度为2n的数组{a1,a2,a3,…,an,b1,b2,b3,…,bn},希望排序后{a1,b1,a2,b2,….,an,bn},请考虑有无时间复杂度o(n),空间复杂度0(1)的解法. 来源 2013年UC的校招笔试题 思路一 第①步.确定b1的位置,即让b1跟它前面的a2,a3,a4交换: a1,b1,a2,a3,a4,b2,b3,b4 第②步.接着确定b2的位置,即让b2跟它前面的a3,a4交换: a