3位数排列问题
Description
求出所有用N~M之间的数组成的各位数字各不相同的三位数
Input
输入文件包括两个10以内的正整数N,M,两数间有一空格(N小于M)。
Output
输出文件按大小顺序输出组成的三位数,每行一个三位数,每位数间不加空格。
Sample Input
7 9
Sample Output
789
798
879
897
978
987
Source
习题6-9
问题分析
这个题目是很典型的数字全排列的问题的演变。鉴于这个题目是指明了三位数,所以有两种思路。一种就是用常规的递归去找数字的全排列的问题。另外一个就是给一个三重的循环通过查重来打印这个全排列。
解决方案
由于是全排列问题的变化,所以,总个数是确定的,是可以通过已经计算出来的。
在查找的过程中,因为在一个排列里面是不允许出现重复数字的,所以必然会使用到一个used[n]的数组,来标记在当前的排列中某个数字是不是使用过。
详见参考代码。
参考代码
顺序方法,用三重循环 使用和递归不一样的方法。用枚举法。虽然效率不高,但是由于数字量小,影响不大。
#include <stdio.h>
int main()
{
int num[11]={0}; //存数字
int start,end; //开始和结束的数字
scanf("%d%d",&start,&end);
int i,j,k,l;
l=end-start+1; //循环的数字范围
for (i=start;i<=end;i++) //把数字存进num数组
{
num[i-start+1]=i;
}
for (i=1;i<=l;i++)
{
for (j=1;j<=l;j++)
{
if(num[j]==num[i]) continue; //有相同数字就continue
for (k=1;k<=l;k++)
{
//有相同数字就continue
if((num[k]==num[i])||(num[k]==num[j])) continue;
//如果没有continue则说明现在的三个数字都没有重复的
printf("%d%d%d\n",num[i],num[j],num[k]);
}
}
}
return 0;
}
代码2,用递归的方法去实现
#include <stdio.h>
int N,M;
int a[3]; //存放当前的3位数
bool used[10]={0}; //标记是不是使用过
void search(int); //递归函数
int main()
{
scanf("%d%d",&N,&M);
search(0);
return 0;
}
void search(int b)
{
if(b>2) //b>2说明已经放好了这个三位数,直接打印即可
{
int i;
for(i=0;i<=2;i++)
{
printf("%d",a[i]);
}
printf("\n");
return;
}
int k;
for(k=N;k<=M;k++) //对数字进行递归search
{
if(!used[k]) //如果没有使用过则接着做
{
a[b]=k;
used[k]=1;
search(b+1); //放下一个位置
a[b]=0;
used[k]=0;
}
}
return;
}
最后复习一下用递归求全排列的方法,使用典型的递归结构。
#include <stdio.h>
int N; //只考虑数字小于10的情况
int a[10]; //存放当前的序列
bool used[10]={0}; //标记是不是使用过
void search(int); //递归函数
int main()
{
scanf("%d",&N);
search(0);
return 0;
}
void search(int b)
{
if(b==N) //递归的最前面写上递归的终止条件并进行相关处理,比如,这里的处理是进行打印
{
int i;
for(i=0;i<N;i++)
{
printf("%d ",a[i]);
}
printf("\n");
return;
}
int k;
for(k=1;k<=N;k++) //递归的循环,有时候不是用循环表示的
{
if(!used[k])
{
a[b]=k; //进行标记
used[k]=1;
search(b+1); //递归调用
a[b]=0; //把标记重置回来
used[k]=0;
}
}
return;
}
分享到:
相关推荐
RUC_Equip 数据库课程设计,以学生、老师、仪器辅导员三种身份参与的大型仪器预约管理平台。 项目实现使用python3.7, mysql,Django, 其中 $Mysql$ 数据库部分使用 $\text{phpmyadmin}$ 进行图形页面管理。数据库...
中国人民大学大型仪器管理平台 RUC_InsManagement一、Introduction本项目为数据库课程设计的前期demo版本,主要包括了该项目的前端设计、交互控制等内容。项目内容大致完整,基本只需要简单的命令就能够上手跑起这个...
Validador RUC和DNI客户和被证明者: * Nuevo campo "tipo de documento"* Validacion RUC y DNI相依性: $ sudo apt-get install tesseract-ocr tesseract-ocr-eng python-imaging python-pip python-bs4 $ sudo ...
以AIROBOT为平台构建的一个智能机器人。主源码见main.c。其余为使用的函数接口定义
RUC Validation. For purposes of control, in Peru, public and private enterprises are identified by a Taxpayer Registration Number-RUC. For this reason it is of much value to accounting or financial ...
汇编语言人大的讲义绝对真实RUC汇编语言人大的讲义绝对真实RUC汇编语言人大的讲义绝对真实RUC汇编语言人大的讲义绝对真实RUC
塞杜拉和厄瓜多尔RUC的验证人 开发此小程序包可以轻松验证: 身份证 自然人的RUC 私人公司的RUC 上市公司的RUC 介绍 对于这种包装的发展,以下库通过创建已被作为一个基础,它已被修改,以便它是安装通过作曲家...
ruc-beamer-模板 用于 RUC 的乳胶投影仪模板。 如何使用 latexmk -xelatex -use-make example.tex 或者, xelatex example.tex 截图 依赖关系 特克斯 雅黑字体 关于作者
jQuery插件,用于验证厄瓜多尔ID或RUC jQuery插件,用于验证厄瓜多尔ID或RUC。 :warning: 该库已有一段时间没有得到积极维护。 但是,请求请求是欢迎的。如何使用jQuery [removed][removed] JavaScript库: [removed...
巴拿马电视用于为巴拿马计算给定RUC的DV的程序。 见 用法: #!/usr/bin/env python2 import sys import argparse import ruc parser = argparse . ArgumentParser ( description = 'DV calculator' ) parser . add_...
API Consulta Ruc y Dni-秘鲁 API顾问DNI和RUC-秘鲁,empleando软件包。 Requerimientos PHP 7.3或更高。 安装 码头工人 使用镜像 docker run -d -p 8080:8080 --name peru-consult -e API_TOKEN=your_key ...
Ruc验证 允许为秘鲁业务验证ruc 使用npm或bower安装 npm install validate-ruc --save bower install validate-ruc --save 从Node.js或浏览器使用 var ruc = require('validate-ruc'); [removed][removed] var ...
在SUNAT中咨询RUC。 安装软件包 npm install 运行服务器 npm start node app.js 请愿 http://localhost:3000/ 要求POST: { " ruc " : " 20254138577 " } 回复: [ { " name " : " Número de RUC: " , " ...
Java语言游戏项目实战资源包 内容概览: 这次分享为你带来了丰富的Java语言游戏项目实战资源,让你在实践中深入掌握Java语言,并开启游戏开发之旅。资源包中包括: 游戏项目代码:精心挑选了多个经典的小游戏项目...
基于elasticsearch+django+bootstrap的类案检索系统。现阶段仅能从RUC校园网访问 Environments elasticsearch==8.4.1 django==4.0.3 bootstrap==5.1.3
2017年中国综合社会调查(CGSS),数据为csv格式,下载自官网(httpcgss.ruc.edu.cnindex.htm),仅作练习数据使用,禁止商用及传播。
多媒体大数据分析研究进展综述导读 自然语言生成、深度学习算法、多媒体大数据分析,今天为大家详细介绍下多媒体大数据分析综述这篇文章。
RUC Rust Util Collection,一个简单而友好的error-chain ,另外还添加了许多有用的utils。 使用error-chain的痛苦经历催生了这个项目。 它可以适应几乎所有场景,而无需任何特殊实现。 文件资料 make doc 用法 ...
当前的RUC系统面临着诸如透明度,交叉补贴,环境问题以及由于车辆效率提高而降低燃油税之类的税收减少等问题。 因此,本文回顾了当今世界上实施的RUC机制在利益相关者问题和货运行业需求方面的优势和劣势,并描述了...