hdu1716 排列2(排列生成算法)
现有四张卡片,用这四张卡片能排列出很多不同的4位数,要求按从小到大的顺序输出这些4位数。
每组输出数据间空一行,最后一组数据后面没有空行。
#include <cstdio>
#include <algorithm>using namespace std;const int N = 4;int a[N];
int cs = 0;bool input()
{int sum = 0;for (int i = 0; i < N; i++) {scanf("%d", &a[i]);sum += a[i];}if (sum == 0) return false;return true;
}void solve()
{if (cs) printf("\n");cs++;sort(a, a + N);bool flag = true;int prev = -1;do {if (a[0] == 0) continue;//表示第一行的第一个if (flag) {flag = false;for (int i = 0; i < N; i++) {printf("%d", a[i]);}} else if (a[0] == prev) {printf(" ");for (int i = 0; i < N; i++) {printf("%d", a[i]);}} else {printf("\n");for (int i = 0; i < N; i++) {printf("%d", a[i]);}}prev = a[0];} while (next_permutation(a, a + N));printf("\n");
}int main()
{
#ifndef ONLINE_JUDGEfreopen("f:\\OJ\\uva_in.txt", "r", stdin);
#endifwhile (input()) {solve();}return 0;
}
import java.io.FileInputStream;
import java.io.OutputStreamWriter;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.Scanner;
import java.util.Arrays;public class Main implements Runnable
{ private static final boolean DEBUG = false;private Scanner cin;private PrintWriter cout;private static final int N = 4;private static final int[] a = new int[N];private int cs = 0;private void init(){try {if (DEBUG) {cin = new Scanner(new InputStreamReader(new FileInputStream("f:\\OJ\\uva_in.txt")));} else {cin = new Scanner(new InputStreamReader(System.in));}cout = new PrintWriter(new OutputStreamWriter(System.out));} catch (Exception e) {e.printStackTrace();} }private boolean input(){int sum = 0;for (int i = 0; i < N; i++) {a[i] = cin.nextInt();sum += a[i];}if (sum == 0) return false;return true;}private boolean next_permutation(int[] array){int len = array.length;int i = len - 1, j;while (true) {j = i;i--;if (array[i] < array[j]) {int k = len - 1;while (!(array[i] < array[k])) k--;int tmp = array[i];array[i] = array[k];array[k] = tmp;Arrays.sort(array, j, len);return true;}if (i == 0) {Arrays.sort(array);return false;}}}private void solve(){if (cs != 0) cout.println();cs++;Arrays.sort(a);boolean flag = true;int prev = 0;do {if (a[0] == 0) continue;if (flag) {flag = false;for (int i = 0; i < N; i++) {cout.print(a[i]);}} else if (a[0] == prev) {cout.print(" ");for (int i = 0; i < N; i++) {cout.print(a[i]);}} else {cout.println();for (int i = 0; i < N; i++) {cout.print(a[i]);}}prev = a[0];} while (next_permutation(a));cout.println();cout.flush();}@Overridepublic void run(){init();while (input()) {solve();}}public static void main(String[] args) {// TODO code application logic herenew Thread(new Main()).start();}
}
hdu1716 排列2(排列生成算法)相关推荐
- php 实现的字典序排列算法,字典序的一个生成算法
字典序的一个生成算法. 最近在LeetCode刷题,刷到一个题,链接: https://leetcode-cn.com/problems/permutation-sequence/ 这个题要求得长度为 ...
- 【算法】组合数学——排列数生成算法详解(一)
组合数学中的全排列深成算法历来是组合数学考试的重要考察点,因此在这里我简单的介绍一下6种全排列生成算法的详细过程,并借此比较它们之间的优劣之处. 不论是哪种全排列生成算法,都遵循着"原排列& ...
- 组合数学4-全排列生成算法
文章目录 全排列生成算法 一 钟声里的全排列 **思考**:生成算法 二 字典序法 1.递归 2.字典序法 例1:生成字母abc的全排列 例2:生成123的全排列 例3:生成839647521的全排列 ...
- 排列生成算法--C++
1 #include<iostream> 2 using namespace std; 3 //初始化,注意两边的初始化,简化算法 4 void Init(int n , int *arr ...
- 有序表A和B,其元素均按照从小到大升序排列,编写一个算法将它们合并成一个顺序表C,要求C的元素也是从小到大的升序排列。
题目要求:有序表A和B,其元素均按照从小到大升序排列,编写一个算法将它们合并成一个顺序表C,要求C的元素也是从小到大的升序排列. 代码实现: void merge(SqList A,SqList B, ...
- 获取序列全排列Java,java中全排列的生成算法汇总
全排列的生成算法就是对于给定的字符集,用有效的方法将所有可能的全排列无重复无遗漏地枚举出来.任何n个字符集的排列都可以与1-n的n个数字的排列一一对应, 因此在此就以n个数字的排列为例说明排列的生成法 ...
- 全排列的生成算法:字典序法
全排列的生成算法:字典序法 全排列的生成算法 对于给定的字符集,用有效的方法将所有可能的全排列无重复无遗漏地枚举出来. 字典序法按照字典序求下一个排列的算法 生成给定全排列的下一个排列所 ...
- 递归方式-全排列生成算法
http://blog.csdn.net/xiazdong/article/details/7986015 排列:从n个元素中任取m个元素,并按照一定的顺序进行排列,称为排列: 全排列:当n==m时, ...
- c++中的STL的常用算法---3(排序算法,拷贝和替换算法,算术生成算法,集合算法)
排序算法 merge() 以下是排序和通用算法:提供元素排序策略 merge: 合并两个有序序列,存放到另一个序列. #include<iostream>using namespace s ...
- 随机系列生成算法(随机数生成)
1.问题描述 给定一个正整数n,需要输出一个长度为n的数组,数组元素是随机数,范围为0 – n-1,且元素不能重复.比如 n = 3 时,需要获取一个长度为3的数组,元素范围为0-2. 2.准备 首先 ...
最新文章
- 怎样做网络推广浅析网站被K之后,优化人员们要注意的方面是哪些?
- 2 - 4 - 实例:X86的中断与异常机制(9-48)
- python opencv图片旋转180度_Python opencv图像镜像翻转
- java 抽象属性 设计_Java 抽象类与模板设计模式详解
- 从 k8s 上卸载 KubeSphere
- 菲涅尔效应(Fresnel Effect)
- 高亮屏幕一条条线_惠普Z24N G2显示器评测 设计师都想要的好屏幕
- 求两个数的最小公约数和最小公倍数
- Transformer在计算机视觉领域走到哪了?
- 知识整理(你想要的Linux知识都在这里)
- HR面必知黑话!错过后悔!
- 《我的WCF之旅》博文系列汇总
- 牛客面经 | BAT、美团、360、滴滴新锐……2W字干货,这不仅仅是一篇面经
- 学计算机基础微课视频教程,计算机基础教学对微课的应用
- 联盟 (Alliances)
- X3D制作简易三维动画
- C语言基础——1024我把函数献给你
- 英伟达黄仁勋发布全球最大GPU,超300斤,汽车后备箱大小
- 2023网盘扩容技术
- java计时器_Java 计时器
热门文章
- struts2和spring的两种整合方式 action的自动装配
- 图形图像处理_c/c++
- python是一种通用编程语言-想自学一种编程语言,各种编程语言都有什么区别?...
- python详细安装步骤-Pycharm及python安装详细教程(图解)
- python课程推荐-课程推荐:四天人工智能 python入门体验课
- python基本语法语句-python 语法基础篇 一
- python爬虫requests-Python爬虫(requests模块)
- python从入门到精通书-Python从入门到精通,跟着《这本书》学就够了?
- python画直方图代码-python plotly画柱状图代码实例
- python画直方图代码-Python绘制直方图及子图的方法分析(代码示例)