B. Bell Ringing

B. Bell Ringing题目链接https://www.jisuanke.com/contest/1410题目要求只有两点,要求1:要把n个数的全排列打印出来,要求2:相邻的两层数满足同一个数字的位置变化之多一个单位比如说123与132这样是符合题意的但是123与312是不行的因为3的位置变了两个单位同理123与231也不符合题意。这是一到递归题,n个数的全排列可以有n-1个…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

题目链接https://www.jisuanke.com/contest/1410

题目要求只有两点,要求1:要把n个数的全排列打印出来,要求2:相邻的两层数满足同一个数字的位置变化之多一个单位

比如说 1 2 3 与 1 3 2这样是符合题意的但是1 2 3 与3 1 2是不行的因为3的位置变了两个单位同理 1 2 3与2 3 1也不符合题意。

这是一到递归题,n个数的全排列可以有n-1个数的全排列里面插入第n个数得到,同时我们只要控制插入的顺序就可以保证满足要求2。样例如下

n=1

1

n=2

1 2

2 1

n=3

1 2 3

1 3 2

3 1 2这一部分由 1 2插入3得出,注意这部分从右插入


3 2 1

2 3 1

2 1 3这一部分由 2 1 插入3得出,这部分从左插入
同理往下3可以推出4,一直推下去
*************************************************************************************
代码实现

#include <iostream>
using namespace std;
int a[80000+10][8];//这么大是为了存1到8的结果
int main()
{
  a[0][0]=1;
  int s=0;        //当前i的开始位置,此时i为1
  int end=0;      //当前i的结尾位置
  int n;
  cin>>n;
  for(int i=2;i<=n;i++)
  {
    int len=end;
    for(int j=s;j<=end;j++)
    {
      if((j-s)%2)//对应样例里面的从左插入
      {
        for(int t=0;t<i;t++)
        {
          len+=1;
          for(int k=0;k<t;k++)
            a[len][k]=a[j][k];
          a[len][t]=i;
          for(int k=t+1;k<i;k++)
            a[len][k]=a[j][k-1];
        }
      }
      else//对应从右插入
      {
        for(int t=i-1;t>=0;t--)
        {
          len+=1;
          for(int k=0;k<t;k++)
            a[len][k]=a[j][k];
          a[len][t]=i;
          for(int k=t+1;k<i;k++)
            a[len][k]=a[j][k-1];
        }
      }
    }
    s=end+1;//更新当前i的开始与结尾
    end=len;
  }
  for(int i=s;i<=end;i++)//输出答案
  {
    for(int j=0;j<n-1;j++)
    {
      cout<<a[i][j]<<" ";
    }
    cout<<a[i][n-1]<<endl;
  }
}

Jetbrains全家桶1年46,售后保障稳定

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/203617.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 别在学习框架了,那些让你起飞的计算机基础知识。「建议收藏」

    别在学习框架了,那些让你起飞的计算机基础知识。「建议收藏」我之前里的文章,写的大部分都是与计算机基础知识相关的,这些基础知识,就像我们的内功,如果在未来想要走的更远,这些内功是必须要修炼的。框架千变万化,而这些通用的底层知识,却是几乎不变的,了解了这些知识,可以帮助我们更快着学习一门知识,更加懂得计算机的运行机制。当然,在面试中也经常会被问到,特别是对于应届生,对于春秋招,也可以看看我前阵子写过的文章历经两个月,我的秋招之路结束了!。也有读者经常问的计算…

  • 探秘X86架构CPU流水线[通俗易懂]

    探秘X86架构CPU流水线[通俗易懂]http://ee.ofweek.com/2013-07/ART-11001-2805-28704745.html导读:CPU是如何工作的呢?一条指令执行需要多长时间?当我们讨论某个新款处理器拥有12级流水线还是18级流水线,甚至是更深的31级流水线时,这到些都意味着什么呢?作为程序员,CPU在我们的工作中扮演了核心角色,因此了解处理器内部的工作方式对程序员来说不无裨益。  CPU…

  • 什么是ARM?_arm开发板

    什么是ARM?_arm开发板原文一、ARM是什么?ARM既可以认为是一个公司的名字,也可以认为是对一类处理器的统称,还可以认为是一种技术的名字。ARM公司是专门从事基于RISC技术芯片设计开发的公司,作为知识产权供应商,本身不直接从事芯片生产,而是转让设计许可,由合作公司生产各具特色的芯片。ARM处理器的内核是统一的,由ARM公司提供,而片内部件则是多样的,由各大半导体公司设计,这使得ARM设计嵌入式系统的时候,可以基于同样的核心,使用不同的片内外设,从而具有很大的优势。二、ARM内核与架构

    2022年10月14日
  • oracle修改sequence最大最小值_oracle取最大值的记录

    oracle修改sequence最大最小值_oracle取最大值的记录序列是oracle提供的用于生成一系列唯一数字的数据库对象,序列会自动生成顺序递增的序列号,以实现自动提供唯一的主键值,系列可以在多个用户并发环境中使用,并且可以为所有用户生成不重复的顺序数字,而不需要任何额外的I/O开销。创建序列序列和视图一样,并不占用实际的存储空间,只是在数据字典中保存他的定义信息。当创建序列时必须拥有createsequence系统权限。语法格式:createsequ…

    2022年10月18日
  • Java开发已经烂大街,没前途了?假的

    Java开发已经烂大街,没前途了?假的经过了多年的发展,Java早已由一门单纯的计算机编程语言,演变为了一套强大的技术体系。在程序员中,Java开发工程师就占据20%的比例,不可否认,Java语言有着广泛的行业发展前景,它在行业中的影响力已是不可避免的。所以许多人想通过学习Java转行、找好工作,所以报班学习Java开发的人越来越多。很多人说Java开发已经烂大街了,现在学Java没前途。真的是这样的吗?现在学Java还有前途吗?本文,给大家详细解答一下。1、Java人才缺口大根据职友集数据显示,Java开发的全国招聘量123805条。从

  • 校园网网络规划与设计方案_计算机网络校园网设计总结

    校园网网络规划与设计方案_计算机网络校园网设计总结以前自己做的网络课程设计,用了思科软件,具体的文件包和word见另外的文章无锡科技职业学院校园网规划方案1需求分析1.1校园网总体概述无锡科技职业学院位于无锡市新吴区新锡路8号,其学习内部划分多个楼层。共有三个局域网站组成一个大型的校园网,分别为宿舍区域,教学区域,以及实训区域。每个部门又有众多人数,总体加起来也有500人。这三个区域又分别由三台路由器组合而成,形成了一个校园网站.1.2校园网络基本要求网络自身的需求受多方面因素影响:①网络的课伸缩性②现有网络所支持的业务③网络

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号