高等学校挑战赛:观看世界杯–限制排序算法。高级程序员考试时间部署和参考书推荐。

考题来源:http://student.csdn.net/mcs/programming_challenges?&page=1
 观看世界杯

章来源网络,参考以下!
高级程序员考试(以下简称高程考试)是电脑软件资格和水平考试受到难度比坏之一级,也是累累在校大学生喜爱参与的一样宗试验。下面是笔者参加高程考试的一些回味,希望对那些在预备高程考试的朋友有帮助。
     复习时间安排   高程考试分上午考及下午考,上午试基础知识,
考试时啊150分钟;下午试验软件设计和程序编制能力,考试时也也150分钟。
  
  要惦记顺利通过高档程序员考试,那么即便应产生一个全的复习计划。报考高等程序员考试应该尽快准备,把时光下在平常,尤其是像程序设计语言及汇编语言等课程,由于多数理工科专业还见面设置有关课程,所以上课时就要多在意。需要小心的是,高级程序员考试并无是概括地试编程,而是考查功能设计。意识及就点于复习吧是特别至关重要的。不克大概地练编程,而如特别注意相关的力的栽培。如果能够有时机与一两独实在项目,对经考是碰头发充分怪帮扶。
  
  就实际的复习时间吧,我个人觉得简单独月左右就算够用了。高程考试便以10月上旬举行,暑假可以用来复习,“十一”长假来做最终努力。
     参考书推荐
  参考书的挑十分重要。除了要的课本以及配套的习题集之外,历年试题集一定要来一致以,笔者推荐大连理工出版社出版的相同拟历年试题详解。关于Casl汇编的开也要是发生相同准,推荐《Casl汇编语言程序设计》(复旦大学出版 王世业)一题。如果你针对数据结构部分的学识无熟识,那么你还得预备同如约就点的开,比如《数据结构教程》(蔡子经
复旦大学出版社)。此外软考办发布之“软件考试备考参考”和练习题,也是特别好的习参考。
     复习注意要点
  在复习中,应该差不多做历年考题,尤其是最近4~5年的。可以助您熟悉考试,起及经济的企图。而且考题也的确发一定之复现率。在复习时头脑而醒,不要设自己沦为泥潭。比如准备编译原理,知道一个大致就是推行了,不克以细节上抠。在复习时一旦记住几句子话,结合试题、分类整理、对比分析、适量练习、经常重复。
     上午试攻略
  就上午试验来说,考之写不多,15道左右,每题都有5提问,每问之间平常都来一定之可持续性。通常操作系统、软件工程、计算机网络是考要,所占据分值比例很死。虽然说高程考试上午部分所求的凡知识面的广度,而非深。但当习时对就三有的的深浅应该出早晚之问询。
  
  就靠近几年的发展趋势来拘禁,上午之课题广度有所扩大,并注重能力的试,数据结构算法分析以及软件质量、软件项目管理、面向对象方法等地方的试题的百分比增加了,计算机硬件基础知识的比重减多少了。因此于习时如果持有青睐。上午试验呢时不时考一些课外之情,通常是软件行业时的辩论、技术及其应用,但是普通还比较简单,只要平时基本上关注有IT类媒体就不过。上午考题中的英文题目之难度也未在语言本身,只要你闹CET-4的水准还要熟悉常用之微机方面的单词(约几百独),看懂题目从没问题。但出于基础知识涉及面比较普遍,需要识记的东西一定多,因此而摸索符合自己的记方法。
     下午试攻略
  下午课题包括软件分析、Casl汇编、数据结构与算法设计等内容,通常为填空题的样式出现。主要考查设计能力,难度比较坏,有众多从来不经过高程考试的考生还是盖下午测验的实绩不优。软件分析这部分情节比较让人深恶痛绝,关键在于全是勉强的统筹开,需要一定之实践经验。因而笔者认为该反复研习来自工程实施、由大家精心设计的陈年课题,领悟其中的次序设计动感,这对准少实践经验的学员朋友吧更要。Casl汇编比较简单,由于寻址方式充分少,所以试题难度不殊,这为是下午考试有极端应当得满分的有的。算法和数据结构是成套考试被最为难之局部,建议以复习时对有些常用算法,像背包问题、迷宫问题、八皇后问题、装箱法、比赛安排相当于,最好坐下,牢记各种变化。虽然不一定有原题,但对开展思路好有帮助。
  
  另外,有一个吓心气会针对君生十分十分帮助。考试时必要毫不动摇,要指向团结来信心。答题时多想出题者的意。一个角度考虑无有结果,就转换一个角度考虑,一定要精心考虑,不要焦躁落笔。最后祝福大家考试成!

  

  以前在该校参加每年的ACM程序设计大赛,感觉程序算法还是不行好玩的,这片上发现一个网站及放出部分算法试题,有点当年底那种心情,看到了,感觉会杀,那便事关少它。目前还以公司即夜遇,闲着没事就尝试了试算法题。

  速手打,没有详细检查,可能来毛病请见谅,但是读题、解题、算法设计,一个众。

 if(type == 1){...} 这段里,虽然写的有点小复杂,但是是个简单的优化,呵呵。

  做事前,先押清,再下手。程序猿时少于,不要任意浪费,错误的解读,终见面招致一个免得法的结果。

class Program
    {
        /*
         *     世界杯正在火热进行中,室友不惜睡眠时间,凌晨起来观看,但Njzy对此不是很感兴趣,他在思考一个问题: 
         * 假设世界杯观看台上有n个座位,排成一排,游客们来到这里自由占位。一般情况下,一个游客首先考虑的座位
         * 肯定是两边都没人的座位,其次考虑的是一边没人的座位,最后没得考虑,只能随便选一张两边都是人的座位。
         * 假设有n个游客依次到场占位,每个人都是按照上述规则选择自己的位子,Njzy就在思考这n个游客占位的可能顺
         * 序有多少种,你能帮助他? 输入描述: 有多组测试数据,每组测试数据包括一个正整数n(0<n<1000000)。 输出
         * 描述: 对于每组数据,由于答案可能会很大,所以输出:答案%1000000007
         * 
         * **************************************
         * 
         * 首先仔细读题:
         *  1.世界杯观看台上有n个座位,这n个座位有n个依次到场的游客来坐。
         *    解析:这里面隐藏两点(这两点很重要,如果没有读出这两点,计算会非常复杂):
         *                  a.座位数等于游客数
         *                  b.游客有入场顺序(此题中游客的入场顺序为1,2,3,4...)
         * (限制型排序算法)                 
         * 
         *                  
         *  2.首先考虑的座位肯定是两边都没人
         *  
         *  3.其次考虑的是一边没人的座位
         *  
         *  4.只能随便选一张两边都是人的座位
         *  
         * 
         * 输出结果:
         * 表示游客的选座方法(顺序号对应游客的入场顺序)。
         * 
         * 
         * 修改 _PersonCount 的值表示入场的人数(座数),为题中n(0<n<1000000)
         * 如果只求出总选座的方法,可以注释 Console.WriteLine(string.Join(",", _SiteArray));
         * 没有输出,提高程序的计算效率。
         */

        static void Main(string[] args)
        {
            //假设:人数、座位数(1,2,3...表示游客的入场顺序)
            int _PersonCount = 4;

            int[] _SiteArray = new int[_PersonCount];

            int personIndex = 1;
            int type = 2;

            switch (_SiteArray.Length)
            {
                case 0: type = -1; break;
                case 1: type = 0; break;
                case 2: type = 1; break;
                case 3: type = 2; break;
                default: type = 2; break;
            }

            FuncRun(ref _SiteArray, ref personIndex,  type);

            Console.WriteLine("总共 {0} 种选座的方法",ResCount);
        }

        static void Swap(ref int l, ref int r)
        {
            l = l ^ r;
            r = l ^ r;
            l = l ^ r;
        }

        static int ResCount = 0;

        static void FuncRun(ref int[] _SiteArray, ref int personIndex,  int type)
        {
            if (personIndex > _SiteArray.Length)
            {
                Console.WriteLine(string.Join(",", _SiteArray));
                ResCount++;
                return;
            }

            if (type == 2)
            {
                //---------------------------------------------------
                //首先考虑的座位肯定是两边都没人
                for (int i = 1; i < _SiteArray.Length - 1; i++)
                {
                    if (_SiteArray[i] > 0)
                        continue;

                    if (_SiteArray[i - 1] == 0 && _SiteArray[i + 1] == 0)
                    {
                        _SiteArray[i] = personIndex++;
                        FuncRun(ref _SiteArray, ref personIndex,  type);
                        //数据恢复
                        personIndex--;
                        _SiteArray[i] = 0;
                    }
                }
                type--;
            }

            //---------------------------------------------------
            //其次考虑的是一边没人的座位
            if (type == 1)
            {
                if (personIndex <= 1 || _SiteArray.Length < 3)
                    return;

                if (_SiteArray[0] == 0 && _SiteArray[1] == 0)
                {
                    _SiteArray[0] = personIndex++;
                    FuncRun(ref _SiteArray, ref personIndex,  type);
                    //数据恢复
                    personIndex--;
                    _SiteArray[0] = 0;
                }

                for (int i = 1; i < _SiteArray.Length - 1; i++)
                {
                    if (_SiteArray[i] > 0)
                        continue;

                    if (_SiteArray[i - 1] == 0)
                    {
                        _SiteArray[i] = personIndex++;
                        FuncRun(ref _SiteArray, ref personIndex,  type);
                        //数据恢复
                        personIndex--;
                        _SiteArray[i] = 0;
                    }
                    else if (_SiteArray[i + 1] == 0)
                    {
                        _SiteArray[i] = personIndex++;
                        FuncRun(ref _SiteArray, ref personIndex,  type);
                        //数据恢复
                        personIndex--;
                        _SiteArray[i] = 0;
                    }
                }

                if (_SiteArray[_SiteArray.Length - 1] == 0 && _SiteArray[_SiteArray.Length - 2] == 0)
                {
                    _SiteArray[_SiteArray.Length - 1] = personIndex++;
                    FuncRun(ref _SiteArray, ref personIndex,  type);
                    //数据恢复
                    personIndex--;
                    _SiteArray[_SiteArray.Length - 1] = 0;
                }
                type--;
            }

            //---------------------------------------------------
            //只能随便选一张两边都是人的座位
            if (type == 0)
            {
                for (int i = 0; i < _SiteArray.Length; i++)
                {
                    if (_SiteArray[i] == 0)
                    {
                        _SiteArray[i] = personIndex++;
                        FuncRun(ref _SiteArray, ref personIndex,  type);
                        //数据恢复
                        personIndex--;
                        _SiteArray[i] = 0;
                    }
                }
            }
        }
    }

 

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注