题意 : 输入正整数n,按从小到大的顺序输出所有形如abcde/fghij = n的表达式,其中a~j恰好为数字0~9的一个排列(可以有前导0),2≤n≤79。

分析 : 最暴力的方法莫过于采用数组存储0~9然后next_permutation枚举排列再带入表达式看是否满足等式,但是这样的复杂度就是O(10!)了,时间复杂度超高。所以采取另外一种枚举方法,先枚举分母fghij,再根据分母算出分子,然后检测分母分子出现的字数是否有重复即可。那这样的复杂度是多少呢?复杂度主要就在枚举分母上了,枚举分母的方法就是采用一个for(int Flood=1234; Flood<100000; Flood++); ,枚举量大大减少。

O(10!)

#include<bits/stdc++.h>
using namespace std;

int main(void)
{
    int n;
    ] = {,,,,,,,,,};
    ;
    while(~scanf("%d", &n) && n){
        if(blank++) puts("");
        bool Have = false;
        do{
            ]* + digit[]* + digit[]* + digit[]* + digit[];
            ]* + digit[]* + digit[]* + digit[]* + digit[];
            ],digit[],digit[],digit[],digit[],digit[],digit[],digit[],digit[],digit[],n);Have=true;}
        }));
        if(!Have) printf("There are no solutions for %d.\n", n);
    }
    ;
}

O(AC)

#include<bits/stdc++.h>
using namespace std;
bool check(int Ceil, int Flood)
{
    ];
    ; i<; i++) digit[i] = false;
    ) digit[] = true;
    while(Ceil){
        ;
        if(digit[remainder]) return false;
        else digit[remainder] = true;
        Ceil/=;
    }
    ){
        ]) return false;
        ] = true;
    }
    while(Flood){
        ;
        if(digit[remainder]) return false;
        else digit[remainder] = true;
        Flood/=;
    }
    return true;
}
int main(void)
{
    int n;
    ;
//    freopen("in.txt", "r", stdin);
//    freopen("out.txt", "w", stdout);
    while(~scanf("%d", &n) && n){
        if(blank++) puts("");
        bool Have = false;
        ; Flood<; Flood++){
            int Ceil = Flood * n;
            ) continue;
            else{
                if(check(Ceil, Flood)){
                    Have = true;
                    ) putchar(');
                    printf("%d / ", Ceil);
                    ) putchar(');
                    printf("%d = %d\n", Flood, n);
                }
            }
        }
        if(!Have) printf("There are no solutions for %d.\n", n);
    }
    ;
}

最新文章

  1. Python学习实践-----打印日历
  2. JAVA中的TreeSet
  3. 2.4 ARM寻址方式
  4. 搞懂Path环境变量
  5. Spring监听器配置
  6. C语言计算任意数的任意次方
  7. node express 学习2
  8. android聊天,存储聊天记录sqlite
  9. adodb.stream对象的方法/属性
  10. JavaScript 中的相等性判断
  11. TCP传输中序号与确认序号的交互
  12. Tomcat启动过程源码解读
  13. delphi弹出信息框大全
  14. AI pytorch
  15. 信息摘要算法之二:SHA1算法分析及实现
  16. shell 中 标准输出和错误输出
  17. Homebrew -- mac 缺失包补充工具
  18. [JSOI 2007]字符加密Cipher
  19. vue中 用媒体查询 空置根节点字体大小
  20. Letterbox,Pillarbox和Pan&amp;Scan

热门文章

  1. 【VS开发】动态添加的ActiveX控件如何响应事件
  2. [Vuejs] 点击单选框触发两次点击事件的处理
  3. 2019/12.09centos安装 | 无密钥登陆
  4. 小记---------linux远程连接集群内其他机器mysql库
  5. Axios 的基本使用
  6. oracle ojdbc 版本须对应,否则日期字段查询结果与实际值可能不一致
  7. python中对多态和多态性的理解
  8. CNN与图像应用
  9. vue在组件中使用v-model
  10. thinkphp+webuploader实现大文件分片上传