lintcode 输出赛程表

在NBA季后赛期间,我们总是安排一支实力相当强的球队去和实力较弱的球队比赛,比如让排名第1的球队和第n的球队一起比赛,这是一个让比赛更有趣的好策略。现在给定n个球队,你需要以字符串的形式返回他们的最终赛程。

n 组球队以正整数的形式给出,从1到n,表示它们的初始排名。排名第1的是实力最强的球队,排名n最弱的球队。我们将使用括号() 和逗号, 来表示比赛团队的配对——括号()表示比赛的组而逗号,表示间隔。在每一轮的配对过程中,你都需要遵循这个策略,那就是让一个相当强的和一个相当弱的配对。

n的范围 [2, 2^12]。
保证输入的n可以转化为2 ^ k这种形式, k是一个正整数。

样例

1

输入: 2
输出: “(1,2)”

2

输入: 4
输出: “((1,4),(2,3))”
解释:
在第一轮中, 我们将球队1和4, 2和3组合在一起, 因为我们需要把强队和弱队放在一起.
然后我们有 (1,4) 和 (2,3)。
在第二轮中, (1,4) 和 (2,3) 的获胜者需要再次比赛以产生最终的胜利者, 所以你需要在最外面加上括号.
我们得到了最终答案((1,4),(2,3))

3

输入: 8
输出: “(((1,8),(4,5)),((2,7),(3,6)))”
解释:
第一轮: (1,8),(2,7),(3,6),(4,5)
第二轮: ((1,8),(4,5)),((2,7),(3,6))
第三轮: (((1,8),(4,5)),((2,7),(3,6)))

思路

每次都是把最左边和最右边的结合在一起比赛,循环完成

代码

12345678910大专栏  lintcode 输出赛程表>1112131415161718192021222324
class  {public:

string (int n) {        // write your code here        vector<string> res;        for (int i = 1; i <= n; ++i)            res.push_back(to_string(i));

while(res.size() != 1){            for (int i = 0; i < res.size(); i++) {                res[i] = "(" + res[i] + "," + res[n-i-1] + ")";                res.pop_back();            }            n /= 2;        }

return res[0];

}};

-------------end of filethanks for reading-------------

原文地址:https://www.cnblogs.com/liuzhongrong/p/12000020.html

时间: 2024-11-02 23:35:00

lintcode 输出赛程表的相关文章

LeetCode Excel Sheet Column Title (输出excel表的列名称)

题意:给一个数字n,输出excel表的列名称. 思路:其实观察可知道,是个26进制的标记而已.那就模拟一下,每次计算一位时就先左移1位,再进行计算. 1 class Solution { 2 public: 3 string convertToTitle(int n) { 4 string ans=""; 5 while(n) //26进制,但是输出时不同而已,是从1开始,而不是0.每次计算将其先左移1位即可. 6 { 7 ans+=(n-1)%26+'A'; 8 n=(n-1-(n-

Java 控制台输入数字 输出乘法表(代码练习)

最近,回忆了一些刚学习Java时经常练习的一些小练习题.感觉还是蛮有趣的,在回顾时想起好多学习时的经历和坎坷,一道小小的练习题要研究半天,珍重过往,直面未来.下面贡献代码,Java 控制台输入数字 输出乘法表(代码练习).希望能给一些初学者一点点的启发.注释写的比较啰嗦,嘻嘻~ 因为博客园有要求"少于150字的随笔不允许发布到首页候选区",所以,凑几行字啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊 //作者:我 //功能:九九乘法表 //时间:

赛程表安排

求n个人(n = 2k)安排循环赛的赛程表,要求任意两组都要塞一场 分治法思想: 1.将原先的问题细分为多个子问题: 2.求得子问题的解: 3.将子问题的解合并求得问题的解: 对于赛程安排,可以先以一个人为单位,两个人为一组安排比赛,之后再以之前的两个人为单位,四个人为一组安排比赛,以此类推,会发现最后的赛程表上右上角的的区域和左下角相同,右下角和左上角相同,因此,求得右边的复制左边的即可. 起点为每个区块左上角的位置,长度为当前需要安排比赛的人数. 代码如下 #include<stdio.h>

输出数据表

描述 编写一个程序打印一个表,表的每一行都给出一个整数.它的平方和它的立方.要求用户输入下限和上限. 输入2个整数,其中第一个输入小于第二个输入.输出从下限到上限之间每个数,它的平方和它的立方.每个数,平方和立方之间以'\t'隔开.样例输入 3 7 样例输出 3 9 27 4 16 64 5 25 125 6 36 216 7 49 343 代码 #include <stdio.h> int main(int argc, const char * argv[]) { int a, b; sca

存储过程和输出分辨率表菜单JSON格式字符串

表的结构,如以下: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[T_4s_Menu]( [F_MenuID] [int] IDENTITY(1,1) NOT NULL, [F_MenuName] [nvarchar](50) NULL, [F_MenuUrl] [varchar](100) NULL, [F_ParentID] [int] NULL, [F_

《开源框架那点事儿33》极限挑战:用一条循环语句正确输出99表!【前两名奖图书一本】

问题的由来 话说我这里有个小萝莉非要拜我为师.呵呵,对于程序媛我一向--嗯嗯认为程序不如人好看,再加上该名萝莉大学还没毕业.术语都多半没有听过,于是就想着拒绝,当时嘴一贱,就说了一句:你用一个For循环做个99表出来. 当然,这个对于小萝莉们来说,已经足够形成挑战了,可是对于群里的一众大佬们来说,自然是不在话下,3下5除二就搞定了.我又异想天开一下.假设不用推断语句.是不是也完毕呢?粗想想是能够的,于是动手摆了几行代码.确实能够. 于是就不断加码.不断添加新的完毕条件,于是就形成了以下的问题.挑

创建内表并输出内表数据

*Deal Data with Internal Table *从表scarr里面读取信息 *用scarr定义一个结构 DATA wa_scarr TYPE scarr. *定义内表 DATA it_scarr TYPE TABLE OF scarr. *选择数据 SELECT * INTO CORRESPONDING FIELDS OF TABLE it_scarr FROM scarr. *检查数据 IF sy-subrc = 0. *遍历内表 LOOP AT it_scarr INTO w

用python输出乘法表

python版本:3.4.3 代码如下: #-*- charset:utf-8 -*- #输出表头 print("                 乘法表") #输出横向数字 print("   ",end='') for j in range(1,10):     print("  ",j,end='') print() print("----------------------------------------") #输

检查打开的文件是不是ELF格式的文件,如果是就输出节头表的文件偏移

#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <errno.h> #include "elf.h" #define FALSE 0 #define TURE 1 #define MAX_S