HDU - 1716 排列2(暴力;next_permutation)

2023-11-08

Ray又对数字的列产生了兴趣:
现有四张卡片,用这四张卡片能排列出很多不同的4位数,要求按从小到大的顺序输出这些4位数。
Input
每组数据占一行,代表四张卡片上的数字(0<=数字<=9),如果四张卡片都是0,则输入结束。
Output
对每组卡片按从小到大的顺序输出所有能由这四张卡片组成的4位数,千位数字相同的在同一行,同一行中每个四位数间用空格分隔。
每组输出数据间空一行,最后一组数据后面没有空行。
Sample Input
1 2 3 4
1 1 2 3
0 1 2 3
0 0 0 0
Sample Output
1234 1243 1324 1342 1423 1432
2134 2143 2314 2341 2413 2431
3124 3142 3214 3241 3412 3421
4123 4132 4213 4231 4312 4321

1123 1132 1213 1231 1312 1321
2113 2131 2311
3112 3121 3211

1023 1032 1203 1230 1302 1320
2013 2031 2103 2130 2301 2310
3012 3021 3102 3120 3201 3210
Sponsor
解题思路:
因为一共才4位数,可以直接暴力出所有可能,再进行排序。

当数位比较多的时候暴力就不行了,可以使用STL全排序函数,因为是从小到大所以使用next_permutation()函数
next_permutation()函数具体介绍见:next_permutation()函数

暴力代码

#include<bits/stdc++.h>
using namespace std;
int a[10],b[1010],c[1000];
int main()
{
	int i,j,k,m;
	int x=0;
    while(1)
    {
        scanf("%d %d %d %d",&a[0],&a[1],&a[2],&a[3]);
        if(a[0]+a[1]+a[2]+a[3]==0)
	 		break;
        if(x) 
			printf("\n");
        x=1;
		int t=1;
		//暴力循环
		for(i=0;i<4;i++)
		{
			if(a[i]!=0)//直接舍去0的情况
			for(j=0;j<4;j++)
			for(k=0;k<4;k++)
			for(m=0;m<4;m++)
			if(i!=j&&i!=k&&i!=m&&j!=k&&j!=m&&k!=m)
			{
				b[t++]=a[i]*1000+a[j]*100+a[k]*10+a[m];//存入数组b
			}
		}
		sort(b,b+t);//排序
		b[0]=0;j=1;
		for(i=1;i<t;i++)//去重
		{
			if(b[i]==b[i+1])
			continue;
			c[j++]=b[i];
		}
		c[j]=0;
		for(i=1;i<j;i++)
		{
			if(c[i]/1000==c[i+1]/1000)
			printf("%d ",c[i]);
			else
			printf("%d\n",c[i]);
		}
	}
 } 

next_permutation代码

#include<stdio.h>
#include<algorithm>
using namespace std;
int main()
{
    int a[5];
    int x=0;
    while(1)
    {
        scanf("%d %d %d %d",&a[0],&a[1],&a[2],&a[3]);
        if(a[0]+a[1]+a[2]+a[3]==0)
	 		break;
        if(x) 
			printf("\n");
        x=1;
        sort(a,a+4);
        int k=0,w=0;
	   do{
            if(a[0]==0)
				continue;
			if(k==0)
				k=1;
            else 
			if(w==a[0]) 
				printf(" ");
            else  
				printf("\n");
			printf("%d%d%d%d",a[0],a[1],a[2],a[3]);
            w=a[0];
        }while(next_permutation(a, a +4));
        printf("\n");
    }
    return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HDU - 1716 排列2(暴力;next_permutation) 的相关文章

随机推荐

  • 论文阅读 - RNN生成文本《Generating Sequences With Recurrent Neural Networks》

    20201101 0 引言 昨天在整理论文的时候 看到了这篇论文 Generating Sequences With Recurrent Neural Networks 实际上这篇论文我很早就看了 只不过当时没有具体来理解 昨天仔细看了看
  • 1.Flutter 抽屉组件drawer 自定义宽度,触发按钮

    效果图如下 实现代码如下 详解都在代码内哦 drawer Drawer child ListView 抽屉里面一个list部件 padding EdgeInsets all 0 顶部padding为0 children
  • 【vue】——CDN或全局引入CSS、JS。

    在入口文件index html中添加 div div 转载于 https www cnblogs com fayin
  • 基于html 与c++ 交互

    前一阵 与c 交互 发现qt写页面实在太丑 于是便使用qwebchannel js 与c 进行交互 发现使用起来还不错 下面 看看qwebchannel的用法 首先 新建一个qwebchannel的对象 new QWebChannel qt
  • 运动标记校正检测

    该项目的目的是开发一个使用OpenCV的手势跟踪系统 该系统使用现场可编程门阵列 FPGA 作为嵌入式系统 通常 锻炼手臂某些部位的人运动不正确且没有任何反馈 因此 该项目的动机是识别特定手势并向用户提供有意义的纠正反馈 该项目使用3D立体
  • 一行代码实现F11的功能,即让浏览器窗口全屏

    1 全屏 全屏 var docElm document documentElement W3C if docElm requestFullscreen docElm requestFullscreen FireFox else if doc
  • 彻底搞懂Cookie和session和token的区别和作用

    首先理解B S架构和C S架构 B S 浏览器与客户端 浏览器 browser C S 服务端与客户端 服务端 server 客户端 client Cookie 存储在客户端的 客户端专门存东西的一个标识 特点 1 能存储的东西很少 基本上
  • ‘git‘不是内部或外部命令及Git 的保姆级安装教程(保姆级教程)

    目录 一 问题出自何方 二 Git的下载 三 安装 浅浅记录下使用Git中遇到的坑 文章来自Git 的安装教程 详解每个步骤 Passerby Wang的博客 CSDN博客 安装gitGit 的下载与安装一 下载1 下载Git登陆git官网
  • ESP32 之 ESP-IDF 教学(十八)—— 组件配置(KConfig)

    本文章 来自原创专栏 ESP32教学专栏 基于ESP IDF 讲解如何使用 ESP IDF 构建 ESP32 程序 发布文章并会持续为已发布文章添加新内容 每篇文章都经过了精打细磨 通过下方对话框进入专栏目录页 CSDN 请求进入目录 O
  • React 路由详解(超详细详解)

    React React 路由 对SPA的理解 1 单页Web应用 single page web application SPA 2 整个应用只有一个完整的页面 3 点击页面中的链接不会刷新页面 只会做页面的局部更新 4 数据都需要通过aj
  • C++中前置声明的应用与陷阱

    前置声明的使用 有一定C 开发经验的朋友可能会遇到这样的场景 两个类A与B是强耦合关系 类A要引用B的对象 类B也要引用类A的对象 好的 不难 我的第一直觉让我写出这样的代码 A h include B h class A B b publ
  • Vue CLI创建新项目,并运行

    1 准备工作 创建项目之前 我们需要知道在哪里创建 第一种 找到创建的文件 打开cmd方法 第二种方法 1 打开需要创建vue项目的文件下 按住shift 鼠标右键 2 点击 此处打开Powershell命令 2 安装vue cli脚手架
  • html 下拉列表对齐,HTML下拉元素宽度未与兄弟姐妹对齐

    你应该使用display inline block而不是float left in list item css 并且应该添加display table row 进入 子列表项目 dark blue 31394C light gray E6E
  • Altium Designer 报错整理-软件安装失败

    一 软件安装问题 安装问题描述一 关于软件安装 安装到进行到最后一步 显示Optimizing startup performance please wait 然后就一直卡住停留在这一步 无法进行下一步 尝试的办法 低版本 安装问题依旧 管
  • IDEA下载安装及配置

    IntelliJ IDEA 的安装 配置与使用 根据尚硅谷进行整理 仅仅只做笔记 根据尚硅谷进行整理 仅仅只做笔记 根据尚硅谷进行整理 仅仅只做笔记 一 IDEA 的下载地址 下载地址 https www jetbrains com ide
  • git命令学习(三)

    merge和rebase的区别 git工作流 git stash 使用场景举例 一个分支还没提交时 要切换到下一个分支 可将前一个分支放在git栈中 git stash git checkout B 处理B分支 git checkout A
  • openlayers3开发教程_开始

    openlayers3开发教程 开始 openlayers官方网站 https openlayers org 在旧版本处查看 Latest v3 v3 20 1 released 2016 12 12 docs API examples o
  • switch手柄可以连电脑吗_你想要的手柄:既能连switch又能连PC!

    您好 我是Manta科技资讯 首先 聊一聊任天堂switch 任天堂switch主机模式下是通过DOCK底座将游戏主机与电视连接以实现无缝切换 这个DOCK底座有2个USB接口 很多小伙伴不知道用它来干嘛 其实DOCK底座能够拓展很多额外的
  • kettle plugin 插件开发

    http wiki pentaho com display COM PDI Plugin Loading svn source pentaho org svnkettleroot plugins S3CsvInput
  • HDU - 1716 排列2(暴力;next_permutation)

    Ray又对数字的列产生了兴趣 现有四张卡片 用这四张卡片能排列出很多不同的4位数 要求按从小到大的顺序输出这些4位数 Input 每组数据占一行 代表四张卡片上的数字 0 lt 数字 lt 9 如果四张卡片都是0 则输入结束 Output