简单的枚举

简单枚举 / 枚举排列 来到《算法竞赛入门经典》第七章《暴力枚举法》,提出的是暴力“列举”出所有可能性并一一试验的方法。目录1 简单枚举2 枚举排列2.1 生成1~n的排列2.2 生成可重集的排列2.3 解答树2.4 下一个排列简单枚举就是枚举一些例如整数、子串的简单类型。但是如果拿到题目直接上手枚举,可能会导致枚举次数过多(甚至引起TLE)。因此在枚举前先要进行分析。比如例题 除法(Division,Uva 725):对于这道题大多数人的思路是直接对abcde和fghij进行0~9的枚举,但是这样会导致枚举次数过多。所以可以从两 阅读详情

补一下从前的做题记录。。。。某天一口气水了三道简单的枚举


这三道题的核心思想就是枚举,通过暴力的枚举所有情况来结局题目。
总体来说比较不费脑,只需要枚举所有情况就可以了,但是在枚举的
方法上,要注意方法的优化,不然可能会超时的。
第一题:
UVA725-7.1-Division
题目链接:https://vjudge.net/problem/UVA-725
这个题的意思是说输入正整数n,按从小到大的顺序输出所有形如abcde/fghij=n的表达式。其中a~j正好为数字0~9的一个排列(可以有前导零)
如:
62
79546/01283=62
94736/01528=62
题目分析:
这个题我写的比较麻烦,就是只枚举分母,结果乘以分母即为分子。
然后用一个数组标记哪一个数用到过了,然后直接暴力枚举所有数
判断是否成立。
给出代码:

#include<iostream>
#include<vector>
#include<queue>
#include<set>
#include<cstdio>
#include<string.h>
using namespace std;
int mark[10];
int judge(int x)
{
    int h=1;
    int book=0;
    while(x%h!=x)
    {
        h=h*10;
        book++;
    }
    return book;
}
void com(int x)
{
    int h=10;
    while(x)
    {
        int t=x%10;
        mark[t]=0;
        x=x/10;
    }
    return;
}
int main()
{
    //freopen("D:\\output.txt", "w", stdout);
    int n;
    memset(mark,1,sizeof(mark));
    int a1=0;
    while(cin>>n&&n)
    {
        a1++;
        if(a1!=1)
            cout<<endl;
        int book1=1;
        for(int i=1234;;i++)
        {
           //cout<<i<<endl;
           int a=n*i;
           if(a>=100000)
            break;
           int h1=judge(a);
           int h2=judge(i);
           int h=h1+h2;
           if(h>10)
            break;
           if(h==9)
              mark[0]=0;
           com(a);
           com(i);
           int book=1;
           int j;
           for(j=0;j<10;j++)
            if(mark[j])
            {
                book=0;
                break;
            }
           if(book)
           {
               book1=0;
               if(h1==4)
                cout<<0<<a<<" / "<<i<<" = "<<n<<endl;
               else if(h2==4)
                cout<<a<<" / "<<0<<i<<" = "<<n<<endl;
               else
                cout<<a<<" / "<<i<<" = "<<n<<endl;
           }
           memset(mark,1,sizeof(mark));
        }
        if(book1)
            printf("There are no solutions for %d.\n",n);
    }
}

第二题:
UVA11059-7.2-Maximum Product
题目链接:
https://vjudge.net/problem/UVA-11059
输入n个元素组成的序列S.找出一个乘积最大的连续子序列。
题目分析:
因为这个题的n很小,<=18,所以直接枚举所有的子序列就可以做出。
给出代码:

#include<iostream>
#include<vector>
#include<queue>
#include<set>
#include<cstdio>
#include<string.h>
using namespace std;
typedef long long int LL;
int main()
{
    //freopen("D:\\output.txt", "w", stdout);
    int book=0;
    int n;
    LL num[20];
    while(cin>>n)
    { book++;
      int i;
      LL MAX=-1;;
      for(i=1;i<=n;i++)
            cin>>num[i];
      for(i=n;i>0;i--)
      {
          int y=1;
          int turn=n-i+1;
          while(turn--)
          {
              LL x=1;
              for(int j=y;j<y+i;j++)
                x*=num[j];
              //cout<<"x="<<x<<endl;
              if(MAX<x)
                MAX=x;
              y++;
          }
      }
      if(MAX<0)
        MAX=0;
      printf("Case #%d: The maximum product is %lld.\n\n",book,MAX);
    }
    return 0;
}

第三题:
UVA10976-7.3-Fraction Again
题目链接:
https://vjudge.net/problem/UVA-10976
输入正整数k,找出所有的正整数x>=y,使得1/k=1/x+1/y.
题目分析:
这个题同样就可以通过枚举所有情况来结局。
不过通过对样例数据的分析我们可以发现,如
果输入一个k,x和y的值最大是无法超过k的两倍的,
这样就找到了边界。
给出代码:

#include<iostream>
#include<vector>
#include<queue>
#include<set>
#include<cstdio>
#include<string.h>
using namespace std;
int main()
{
    //freopen("D:\\output.txt", "w", stdout);
    int n;
    while(cin>>n)
    {
        int num1[50000];
        int num2[50000];
        int book=0;
        int i;
        for(i=n+1;i<=n*2;i++)
        {
            long long int a=i-n;
            long long int b=n*i;
            if(b%a==0)
            {
                book++;
                num1[book]=b/a;
                num2[book]=i;
            }
        }
        printf("%d\n",book);
        for(i=1;i<=book;i++)
        {
            printf("1/%d = 1/%d + 1/%d\n",n,num1[i],num2[i]);
        }
    }
    return 0;
}
【windows】【系统还原】亦是美kms执行一键关闭defender 之后,windows defender 被卸载了,无论如何都打不开 还是执行 都没有明显效果 那么,我最后是怎么解决得呢? 一、打开控制面板(任务栏搜索kzmb) 阅读详情

相关推荐

Stata实战:用双向固定效应模型分析房价,从数据清洗到结果解读(附完整代码)

本文详细介绍了如何使用Stata实现房价数据的双向固定效应模型分析,从数据清洗到结果解读的全流程。通过具体代码示例,帮助读者掌握面板模型的应用技巧,特别适合经济学和金融学研究者进行房价影响因素分析。

weixin_31528001的博客 277

Java枚举enum : 简单枚举与自定义枚举的入门使用

1.简单枚举 场景: 水果类型有苹果、橘子和香蕉。 代码: /** * 简单枚举 * @author hanchao */ enum Fruit{ APPLE,ORANGE,BANANA } public static void main(String[] args) throws Exception{ //测试简单枚举 LOGGER.info("测试简单枚举...

韩超的博客 (hanchao5272) 1万+

【保研面试】线性代数面试复习

线性相关和无关 有向量组A,a1,a2…an , 如果存在不是全为0的k1,k2…kn,满足 a1 * k1 + a2 * k2… an * kn = 0 则向量组A称为线性相关(可以跟向量组A共面联系,即可以通过几个向量,表示出另外几个向量,故称为线性相关) 极大线性无关组 设有向量组A a1,a2…an(本身为线性相关) :若选出r个向量,满足以下条件 (1)向量组 r : 线性无关; (2) 向量组A中任意r+1个向量(若有的话)都线性相关, 则向量组r 是向量组A的一个极大线性无关组(简称为

云端筑梦师 6311

重新认识java(十) ---- Enum(枚举类)

有的人说,不推荐使用枚举。有的人说,枚举很好用。究竟怎么使用,如何使用,仁者见仁智者见智。总之,先学会再说~

mystery的博客 7万+

STM32H750xx【QSPI】轮询方式读写GD25Q64E

本文详细介绍了GD25Q64E其特性、引脚定义及功能说明,重点阐述了在STM32H750平台上通过CubeMX配置QuadSPI接口的步骤,包括时钟设置、参数优化等。文章提供了完整的BSP驱动开发流程,涵盖写使能、四线模式使能、ID读取、解除保护、扇区擦除、整片擦除、页编程和数据读取等关键功能实现,并通过读写测试验证了DummyCycles参数对数据准确性的影响。

honmy18的博客 1422

Anylabeling与SAM协同:从智能标注到YOLO数据集构建的完整实践

本文详细介绍了Anylabeling与SAM协同标注的完整实践,从智能标注到YOLO数据集构建的全流程。通过结合SAM的自动分割能力和Anylabeling的交互式标注,显著提升标注效率,特别适合小样本、复杂形状和多类别标注场景。文章还提供了环境搭建、标注优化技巧以及YOLO格式转换的实用指南。

weixin_26873711的博客 461

枚举——简单枚举

  第一次写博客,写得不好请见谅,我想把acm之路的过程记录下来思想:1、枚举也称暴力法,很多问题都可以通过枚举来完成,虽然大多数题目都有可能超时,但是枚举法都是分析清楚题目的初始解法,本人中招过某些题目就是因为想得太复杂而做不出甚至浪费大量时间2、主要是通过枚举所有可能的解或者子集来对比是否是自己想要的结果例如:输出前n个素数,就是由枚举2—n的数来判断是否为素数,emm还是做题实际穷举算法的步...

sen的博客 3142

VTK:vtkAssembly用法实战

VTK:vtkAssembly用法实战程序输出程序完整源代码 程序输出 程序完整源代码 #include <vtkActor.h> #include <vtkAssembly.h> #include <vtkAxesActor.h> #include <vtkCubeSource.h> #include <vtkNamedColors.h> #include <vtkNew.h> #include <vtkOrientation

希望我的博客,能帮上你解决学习中工作中所遇到的问题 936

Java 枚举类简单使用

1 简单的枚举类 // 创建一个枚举类 package com.lihaogn.test; public enum SeasonEnum { // 定义四个枚举实例 SPRING,SUMMER,AUTUMN,WINTER; } // 测试类 package com.lihaogn.test; public class Test { public static void main(St...

lihaogn的博客 9896

ESP32S3接入讯飞在线语音识别教程及配套源代码

本文介绍了如何使用ESP32-S3开发板实现讯飞在线语音识别功能。首先,需要准备硬件设备,包括ESP32-S3开发板、麦克风模块、MicroSD卡模块和扬声器模块。接着,安装Arduino IDE并配置ESP32-S3开发环境,注册讯飞开放平台账号并获取API凭证。然后,通过I2S接口连接麦克风模块,并编写代码实现语音录制、Base64编码、API请求和识别结果处理。代码包括初始化WiFi、麦克风、系统时间,以及录制语音、发送请求、解析响应等功能。最后,通过按键触发录音,并将识别结果输出到串口。

2401_88800025的博客 748

电商平台系统需求规格说明书(示例)

​​电商系统​​:指本文件所描述的集商品展示、销售、支付、物流跟踪、用户管理等功能于一体的综合性在线购物平台。​​API​​:应用程序编程接口(Application Programming Interface),用于实现系统各模块之间或与外部系统之间的数据交互和功能调用。

跟佟格湾一起学习计算机知识吧~ 1265

简单工厂和枚举

初学简单工厂和枚举的应用 单纯记录供自己使用 简单工厂首先将共性抽离出来生成超类接口用于被每个具体类实现,具体实现类实现超类方法。创建工厂类根据传入的枚举参数创建不同实现对象。 代码: 超类接口 /** * 饭店功能 */ public interface Ifunction { //加水 void water(); //烹饪 void cook(...

weixin_42563880的博客 274

第54节:vue3+cesiumjs

对之前的vue2+cesiumjs 进行了升级

qq_29384639的博客 62

暴力之简单枚举

<br />暴力之简单枚举<br />优点:算法简单,容易编程实现,正确性易证明<br />缺点:速度慢,时间复杂度高<br />重点,对于题目的分析,寻找优化的方法。<br />对于枚举法,应该要权衡枚举的时间代价和所得到的信息量的关系。<br />例如(黑书思考题1.2.6)离散函数,给定一个离散函数,为集合{1,2.....n},取值为-2^32--2^32,找出函数图像上两个点,是的函数在这两点之间的点都在连线的下方,且此连线的斜率尽量大。<br />n很大的时候容易超时,可是有个O(n)的算法。这

喵呜的Blog 3268

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

C#枚举的简单使用

枚举这个名词大家都听过,很多小伙伴也使用过, 那么枚举在开发中能做什么,使用它后能给程序代码带来什么改变,为什么用枚举。 各位看官且坐下,听我一一道来。 为什么使用枚举? 1、枚举能够使代码更加清晰,它允许使用描述性的名称表示整数值。 2、枚举使代码更易于维护,有助于确保给变量指定合法的、期望的值。 3、枚举使代码更易输入和读取。 枚举有哪些用法? 1、简单枚举...

weixin_30460489的博客 253

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

简单枚举算法

枚举算法是我们在日常中使用到的最多的一个算法,它的核心思想就是:枚举所有的可能。枚举法的本质就是从所有候选答案中去搜索正确的解,使用该算法需要满足两个条件:(1)可预先确定候选答案的数量;(2)候选答案的范围在求解之前必须有一个确定的集合。枚举算法简单粗暴,他暴力的枚举所有可能,尽可能地尝试所有的方法。虽然枚举算法非常暴力,而且速度可能很慢,但确实我们最应该优先考虑的!因为枚举法变成实现最简单,并且得到的结果总是正确的。本文收集可以采用枚举算法的一些题例,以供查阅、学习之用。

red2brick的博客 2526

简单枚举示例

1、简单的枚举 public enum Day { //名(值) MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;//记住要用分号结束 } public class Main { public static voi...

weixin_30525825的博客 323

计算机枚举法教案,简单枚举算法教案.ppt

文档介绍:简单枚举算法教案朱全民简单枚举法枚举法所谓枚举法,指的是从可能的解集合中一一枚举各元素,用题目给定的检验条件判定哪些是无用的,哪些是有用的.能使命题成立,即为其解。一般思路:对命题建立正确的数学模型;根据命题确定的数学模型中各变量的变化范围(即可能解的范围);利用循环语句、条件判断语句逐步求解或证明;枚举法的特点是算法简单,但有时运算量大。对于可能确定解的值域又一时找不到其他更好的算法时...

weixin_31748999的博客 1072

枚举的简单使用

package com.jidongcloud.fastdfs.util; /** * ClassName:TestEnum * Package:com.jidongcloud.fastdfs.util * * @DATE:2020/11/14 0014 1:11 * @Author:robin * Describe:枚举的简单使用。 */ public enum Status { CONTINUE(100, "Continue"), SWITCHING_PROTOCOLS

qq_30347133的博客 130

定义一个简单的枚举类

定义一个简单的枚举类 /** * 状态枚举类 */ public enum EnumStatus { /** * 进行中 */ PROCESSING(1, "进行中"), /** * 未开始 */ NO_START(2, "未开始"), /** * 已结束 */ IS_OVER(3, "已结束"), /** * 未达标 */ NO_QUALIFY(4, "未达标

weixin_43272286的博客 227

枚举类简单使用和分析

enum Day {MONDAY("星期一"), TUESDAY("星期二"), WEDNESDAY("星期三"), THURSDAY("星期四"), FRIDAY("星期五"), SATURDAY("星期六"), SUNDAY("星期日");

lu2322337891的博客 302

简单枚举类型

简单枚举类型——植物与颜色 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description  请定义具有red, orange, yellow, green, blue, violet六种颜色的枚举类型color,根据输入的颜色名称,输出以下六种植物花朵的颜色: Rose(red),

且视他人之疑目如盏盏鬼火 399

关于枚举的简单使用

java 枚举

qq_41894387的博客 510

说说Java中的枚举——简单使用

 我们来看一个枚举类型使用的小例子。需求中要求可以对指定的日期进行相应的信息输出。对于这么简单的需求,这里就使用枚举类型来进行处理。前面我们已经定义好了包含有五个工作日的枚举类型。下面的代码则是进行输出的方法: Java代码/**         * 根据日期的不同输出相应的日期信息。         * @param weekDay     代表不同日

1933

UVA - 10167 - Birthday Cake (简单枚举)

思路:简单枚举 AC代码: #include #include #include #include #include using namespace std; int x[105], y[105]; int main() { int A, B, N; while(scanf("%d", &N), N) { for(int i = 0; i < 2 * N; i++

Never say never 833

java的枚举类简单例子

简单的枚举类: public enum PlaceCode { PLACE_CODE_BZHKD("10", "大学"), PLACE_CODE_KC("11", "高中") ; private String code; private String value; PlaceCode(String code, String value) { this.code = code; this.value = value

震旦小读者的博客 269
上一篇: 栈、队列与优先队列
下一篇: 大一下-----又是一个新学期
DLKKILL
博客等级 码龄10年 5粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值