简单枚举UVa725-division (abcde / fghij = n)

2023-12-19 05:32

本文主要是介绍简单枚举UVa725-division (abcde / fghij = n),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目位置:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=666

Write a program that finds and displays all pairs of 5-digit numbers that between them use the digits 0
through 9 once each, such that the first number divided by the second is equal to an integer N, where
2 ≤ N ≤ 79. That is,
abcde
fghij = N
where each letter represents a different digit. The first digit of one of the numerals is allowed to be
zero.
Input
Each line of the input file consists of a valid integer N. An input of zero is to terminate the program.
Output
Your program have to display ALL qualifying pairs of numerals, sorted by increasing numerator (and,
of course, denominator).
Your output should be in the following general form:
xxxxx / xxxxx = N
xxxxx / xxxxx = N
.
.
In case there are no pairs of numerals satisfying the condition, you must write ‘There are no
solutions for N.’. Separate the output for two different values of N by a blank line.
Sample Input
61
62
0
Sample Output
There are no solutions for 61.
79546 / 01283 = 62
94736 / 01528 = 62



开始以为这道题可以暴力枚举,全排列,判断每种情况,结果可想而知,超时。代码也附在下面,像填空题啥的可以用…

看了书之后才发现可以简化很多。具体解释看代码

特别注意,结尾没有空行~!!!

这里是

sprintf(buf,"%05d%05d",abcde,fghij)

先转化成字符串,然后排序,再依次判断对应位置是否为i

同时很巧妙的是提前判断一下长度超过10就肯定不满足,而之后的数也会越来越大,所以直接break;



另外判断是否为0~9,如果是数字的话,还可以按照

1+2+3+4+5+…+9=45

1*2*3*4*5*…*9=362880

来判断


//巧妙的借助fghij可以由ancde获得,减少了循环次数。不用把每种情况列举出来
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cstring>
using namespace std;int main(){int n,kase=0;int fghij,abcde;char buf[20];while(scanf("%d",&n)!=EOF&&n){if(kase++) printf("\n");<span style="white-space:pre">		</span>//开头输出\nint num = 0;for(fghij = 1234;fghij<49384;fghij++){      //!!!注意截至条件,98765/2=49384bool ok=1;abcde=fghij*n;sprintf(buf,"%05d%05d",abcde,fghij);if(strlen(buf)>10) break;                //书上是break,如果是有临界条件,continue也可以 sort(buf,buf+10);<span style="white-space:pre">			</span>//排序以后对0~9是否出现进行判断for(int i = 0; i <=9; i++){if(buf[i]!=i+'0'){ok=0;break;}}if(ok){printf("%05d / %05d = %d\n",abcde,fghij,n);num++;}}if(num==0) printf("There are no solutions for %d.\n",n);}return 0;
}



最后也附上超级暴力的枚举,全排序可以借鉴

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;int main(){int n,ok=0,a[10];for(int i=0;i<=9;i++) a[i]=i;while(scanf("%d",&n)!=EOF&&n){ok=0;do{int x=a[9]*10000+a[8]*1000+a[7]*100+a[6]*10+a[5];int y=a[0]*10000+a[1]*1000+a[2]*100+a[3]*10+a[4];if(y*n==x){printf("%d/%d = %d\n",x,y,n);ok=1;}}while(next_permutation(a,a+10));if(ok==0) printf("There are no solutions for %d.\n",n);}return 0;
}










这篇关于简单枚举UVa725-division (abcde / fghij = n)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/511032

相关文章

C++11作用域枚举(Scoped Enums)的实现示例

《C++11作用域枚举(ScopedEnums)的实现示例》枚举类型是一种非常实用的工具,C++11标准引入了作用域枚举,也称为强类型枚举,本文主要介绍了C++11作用域枚举(ScopedEnums... 目录一、引言二、传统枚举类型的局限性2.1 命名空间污染2.2 整型提升问题2.3 类型转换问题三、C

基于Python实现一个简单的题库与在线考试系统

《基于Python实现一个简单的题库与在线考试系统》在当今信息化教育时代,在线学习与考试系统已成为教育技术领域的重要组成部分,本文就来介绍一下如何使用Python和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构

Java 枚举的基本使用方法及实际使用场景

《Java枚举的基本使用方法及实际使用场景》枚举是Java中一种特殊的类,用于定义一组固定的常量,枚举类型提供了更好的类型安全性和可读性,适用于需要定义一组有限且固定的值的场景,本文给大家介绍Jav... 目录一、什么是枚举?二、枚举的基本使用方法定义枚举三、实际使用场景代替常量状态机四、更多用法1.实现接

C/C++ chrono简单使用场景示例详解

《C/C++chrono简单使用场景示例详解》:本文主要介绍C/C++chrono简单使用场景示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录chrono使用场景举例1 输出格式化字符串chrono使用场景China编程举例1 输出格式化字符串示

windows和Linux安装Jmeter与简单使用方式

《windows和Linux安装Jmeter与简单使用方式》:本文主要介绍windows和Linux安装Jmeter与简单使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows和linux安装Jmeter与简单使用一、下载安装包二、JDK安装1.windows设

C 语言中enum枚举的定义和使用小结

《C语言中enum枚举的定义和使用小结》在C语言里,enum(枚举)是一种用户自定义的数据类型,它能够让你创建一组具名的整数常量,下面我会从定义、使用、特性等方面详细介绍enum,感兴趣的朋友一起看... 目录1、引言2、基本定义3、定义枚举变量4、自定义枚举常量的值5、枚举与switch语句结合使用6、枚

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co

Mysql表的简单操作(基本技能)

《Mysql表的简单操作(基本技能)》在数据库中,表的操作主要包括表的创建、查看、修改、删除等,了解如何操作这些表是数据库管理和开发的基本技能,本文给大家介绍Mysql表的简单操作,感兴趣的朋友一起看... 目录3.1 创建表 3.2 查看表结构3.3 修改表3.4 实践案例:修改表在数据库中,表的操作主要

springboot简单集成Security配置的教程

《springboot简单集成Security配置的教程》:本文主要介绍springboot简单集成Security配置的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录集成Security安全框架引入依赖编写配置类WebSecurityConfig(自定义资源权限规则