zoukankan      html  css  js  c++  java
  • 编程之美2.8 | 找符合条件的整数

    思路还是相当地巧妙。

    求余数的话,(a+b)%n=(a%n+b%n)%n;

    用vector来表示整数的话(出现1的位置),可以避免溢出。

    注意第20行,在更新remainders[(j+r)%n]时,要确保每个remainders的每个序列都是递增的,不能存在相等的情况。

     1 #include <time.h>
     2 #include <math.h>
     3 #include <stdlib.h>
     4 
     5 using namespace std;
     6 
     7 long long findMInZeroOneNum(int n) {
     8         vector<vector<int> > remainders(n);
     9         remainders[1].push_back(0);
    10 
    11         bool update = false;
    12         int noupdate = 0;
    13         for (int i = 1, j = 10 % n; ; j = (j * 10) % n, i++) {
    14                 if (remainders[j].empty()) {
    15                         remainders[j].push_back(i);
    16                         update = true;
    17                 }
    18                 for (int r = 1; r < n; ++r) {
    19                         if (remainders[r].empty()) continue;
    20                         if (i <= remainders[r].back()) continue;
    21                         if (!remainders[(j + r) % n].empty()) continue;
    22                         remainders[(j + r) % n] = remainders[r];
    23                         remainders[(j + r) % n].push_back(i);
    24                         update = true;
    25                 }
    26                 if (!update) noupdate++;
    27                 else noupdate = 0;
    28                 if (noupdate == n || !remainders[0].empty()) break;
    29         }
    30 
    31         if (remainders[0].empty()) return -1;
    32         else {
    33                 long long ans = 0;
    34                 for (int i = 0; i < remainders[0].size(); ++i) {
    35                         ans += pow(10, remainders[0][i]);
    36                 }
    37                 return ans;
    38         }
    39 }
    40 
    41 long long bruteForce(int n) {
    42         if (n <= 0) return -1;
    43         for (long long i = 1; ; ++i) {
    44                 if (i % n != 0) continue;
    45                 long long tmp = i;
    46                 while (tmp) {
    47                         int d = tmp % 10; 
    48                         if (d != 0 && d != 1) break;
    49                         tmp /= 10;
    50                 }
    51                 if (tmp == 0) return i;
    52         }
    53         return -1;
    54 }
    55 
    56 int main() {
    57         srand(time(NULL));
    58         int n = rand() % 99;
    59 
    60         cout << n << endl;
    61         long long n1 = findMInZeroOneNum(n);
    62         cout << n1 << endl;
    63         long long n2 = bruteForce(n);
    64         cout << n2 << endl;
    65         if (n1 != n2) {
    66                 cout << n << " " << n1 << " " << n2 << endl;
    67         }
    68 
    69         return 0;
    70 }
  • 相关阅读:
    SpringBoot项目启动Gzip压缩
    Docker学习(一)
    MySQL中text类型说明
    java MultipartFile多文件上传/通过文件夹解析所有文件
    java后端处理跨域
    SpringCloud Feign调用服务接口时,GET请求变成POST请求报错
    java8 LocalDateTime/LocalDate 获取各种日期类型
    IDEA 不能输入中文
    基于docker 搭建minio 文件服务器
    MySql数据库导入sql错误 Unknown collation: 'utf8mb4_0900_ai_ci'
  • 原文地址:https://www.cnblogs.com/linyx/p/4001841.html
Copyright © 2011-2022 走看看