AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-22322013

Sai's questions

Martin Hope
Sai
Asked: 2023-09-24 04:46:28 +0800 CST

找到能够整除数组中整数之间互不差的最小正整数

  • 4

给定一个由 N 个正整数组成的数组 A。

找到最小的正整数 d, st,不存在整数对 (i,j)(1<=i<j<= N),其中 abs(A_i - A_j) 可被 d 整除。


给定 N 个元素,并假设所有元素都是唯一的,差异的数量可以是:

第 N - 第 1 个、第 N - 第 2 个、...、第 N - 第 (N-1) 个;
第(N-1)个 - 第1个,第(N-1)个 - 第2个,...,第(N-1)个 - 第(N-2)个;
第(N-2)个-第1个、第(N-2)个-第2个、第(N-2)个-第3个、...、第(N-2)个-第(N-3)个;
。
。
。
第二名 - 第一名;
即总共有 N(N-1)/2 个差异。

让整数数组称为:arr。那么,有:

int arr[N];

我不知道如何以比暴力更好的方式解决这个问题,其中绝对存在 O(N^2) 时间复杂度。


但是,似乎更简单的方法是计算两个数字的 gcd,比如说取最小的整数

d = arr[0]

那么是否可以递归计算

gcd(d, arr[i]), i=1,2,3,..., N-1。

但是,我什至不知道它是否正确。

  `
       #include <limits.h>
       #include <stdio.h>
       #include <stdlib.h>
       #include <string.h>

       int checked_atoi (const char *from) {
         char *endptr= NULL;
         long lval= strtol(from, &endptr, 10);
         if (*endptr) {
           fprintf(stderr, "invalid number '%s'\n", from);
           exit(12);
         } 
         else if (lval<INT_MIN || lval>INT_MAX) {
           fprintf(stderr, "value '%ld' out of range\n", lval);
           exit(13);
         }
         return (int)lval;
       }

       int gcd(int a, int b, int c){
         if (b==0)
           return a;
        printf("\n step: %d<> gcd : a: %d, b: %d", c++, a, b);
        return gcd(b, a%b, c);
       }
       int find_smallest_d(int *arr, int N){
         int smallest_d = arr[0];
            printf("\n find_smallest_d");
            for (int i=1; i<N; i++){
               smallest_d = gcd(smallest_d, arr[i], 1);
            }
         return smallest_d;
       }
       int main(int argc, char *argv[]){
          int N=argc-1;
          printf("The size of array: %d", N);
         
          int arr[N];
          for (int i=0; i<N; ++i) {
            arr[i]= checked_atoi(argv[i+1]);
          }
          printf("The %d values:", N);
          for (int i=0; i<N; ++i) {
            printf(" %d", arr[i]);
          }
          printf("\n");
          int smallest_d = find_smallest_d(arr, N);
          printf("\n smallest value of d is: %d", smallest_d);
       }
  `

得到的结果表明程序中逻辑的实现可能是错误的,如获取输入:12,23,34,45,56,67;1. 差异abs(arr[i]-arr[j])的唯一值是:

  `
       1. abs(12-23) = 11,
       2. abs(12-34) = 22,
       3. abs(12-45) = 33,
       4. abs(12-56) = 44,
       5. abs(12-67) = 55,
  `  

因此,gcd应该是11;虽然不清楚是否需要 gcd。

另外,答案应该是:10。

algorithm
  • 1 个回答
  • 59 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    重新格式化数字,在固定位置插入分隔符

    • 6 个回答
  • Marko Smith

    为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会?

    • 2 个回答
  • Marko Smith

    VScode 自动卸载扩展的问题(Material 主题)

    • 2 个回答
  • Marko Smith

    Vue 3:创建时出错“预期标识符但发现‘导入’”[重复]

    • 1 个回答
  • Marko Smith

    具有指定基础类型但没有枚举器的“枚举类”的用途是什么?

    • 1 个回答
  • Marko Smith

    如何修复未手动导入的模块的 MODULE_NOT_FOUND 错误?

    • 6 个回答
  • Marko Smith

    `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它?

    • 3 个回答
  • Marko Smith

    在 C++ 中,一个不执行任何操作的空程序需要 204KB 的堆,但在 C 中则不需要

    • 1 个回答
  • Marko Smith

    PowerBI 目前与 BigQuery 不兼容:Simba 驱动程序与 Windows 更新有关

    • 2 个回答
  • Marko Smith

    AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String”

    • 1 个回答
  • Martin Hope
    Fantastic Mr Fox msvc std::vector 实现中仅不接受可复制类型 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant 使用 chrono 查找下一个工作日 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor 构造函数的成员初始化程序可以包含另一个成员的初始化吗? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský 为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul C++20 是否进行了更改,允许从已知绑定数组“type(&)[N]”转换为未知绑定数组“type(&)[]”? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann 为什么 {2,3,10} 和 {x,3,10} (x=2) 的顺序不同? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller 在 5.2 版中,bash 条件语句中的 [[ .. ]] 中的分号现在是可选的吗? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench 为什么双破折号 (--) 会导致此 MariaDB 子句评估为 true? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng 为什么 `dict(id=1, **{'id': 2})` 有时会引发 `KeyError: 'id'` 而不是 TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String” 2024-03-20 03:12:31 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve