xxlxxl 发表于 2021-3-19 21:30:12

求大神帮忙设计一个算法!!!

本帖最后由 xxlxxl 于 2021-3-20 21:24 编辑

我有一个array A,长度为n,其中每一个元素代表一个传感器同时表示了自己在这条横线上的位置,比如A等于1,A等于4,那这两个传感器之间相距3。如果两个传感器间距离为 r 就可以接收到对方的电波。
现在需要设计一个算法返回array中所有可以互相接收电波的传感器的索引。
有个例子:

A : , r = 2: return {{1, 2}, {3, 4}, {3, 5}, {3, 6}, {4, 5}, {4, 6}, {5, 6}}.
其中 A 可以接收到 A 的信号是因为 A 可以接收到 A 的信号,同时 A 可以接收到 A 的信号。

wp231957 发表于 2021-3-20 07:49:11

再多给几组测试案例,

人造人 发表于 2021-3-20 12:44:30

#include <iostream>
#include <vector>
#include <utility>

const std::vector<std::pair<size_t, size_t>> get(const std::vector<size_t> &v, size_t r) {
    std::vector<std::pair<size_t, size_t>> result;
    for(size_t i = 0; i < v.size(); ++i) {
      size_t prev = v;
      for(size_t j = i + 1; j < v.size(); ++j) {
            if(prev + r >= v) {
                prev = v;
                result.push_back(std::pair<size_t, size_t>(i, j));
            } else break;
      }
    }
    return result;
}

std::ostream &operator<<(std::ostream &os, const std::vector<std::pair<size_t, size_t>> &rhs) {
    for(const auto &i: rhs) {
      os << "{" << i.first << ", " << i.second << "}" << std::endl;
    }
    return os;
}

int main() {
    std::vector<size_t> v = {1, 4, 5, 8, 9, 10, 12};
    size_t r = 2;
    std::vector<std::pair<size_t, size_t>> result = get(v, r);
    std::cout << result << std::endl;
    return 0;
}
页: [1]
查看完整版本: 求大神帮忙设计一个算法!!!