Форум программистов, компьютерный форум, киберфорум
Go (Golang)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 27.08.2024
Сообщений: 2

Требуется помощь с задачей

27.08.2024, 13:36. Показов 867. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, прошу помочь с задачей. Нужно написать её решение на Go.
Сама задача
В частном секторе расположены N подряд стоящих вышек,
обеспечивающих сотовую связь. Вам дается строка S длины N, где S[i] = '1'
означает, что вышка работает и обеспечивает кооператив связью, S[i] = '0'
означает отсутствие связи. Вышка имеет показатель X, который означает, сколько
кооперативов слева и справа от себя она может обеспечивать связью. Вам нужно
выяснить, могут ли все кооперативы пользоваться сотовой связью.
Пример: N = 4, X = 1, S = "1001"
Результат: Yes.
Пример: N = 4, X = 0, S = "1001"
Результат: No.

Есть её решение на C++

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <iostream>
#include <string>
#include <vector>
using namespace std;
 
bool canProvideCoverage(int N, int X, const string& S) {
    // Массив для отслеживания покрытия кооперативов
    vector<bool> coverage(N, false);
 
    // Проходим по всем вышкам
    for (int i = 0; i < N; ++i) {
        if (S[i] == '1') {
            // Обеспечиваем связь кооперативам слева
            for (int j = 1; j <= X && (i - j) >= 0; ++j) {
                coverage[i - j] = true;
            }
            // Обеспечиваем связь кооперативам справа
            for (int j = 1; j <= X && (i + j) < N; ++j) {
                coverage[i + j] = true;
            }
        }
    }
 
    // Проверяем, есть ли покрытие для всех кооперативов
    for (int i = 0; i < N; ++i) {
        if (S[i] == '0' && !coverage[i]) {
            return false; // Если вышка не работает и нет покрытия, возвращаем false
        }
    }
    return true; // Все кооперативы имеют покрытие
}
 
int main() {
    int N = 5, X = 1;
    string S = "10001";
 
    if (canProvideCoverage(N, X, S)) {
        cout << "Yes" << endl;
    }
    else {
        cout << "No" << endl;
    }
 
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.08.2024, 13:36
Ответы с готовыми решениями:

Требуется помощь знатоков Lisp
((lambda (x y z) (if (&gt; x y) (if (&gt; x z) x z) (&gt; y z) y z)) 2 4 6) помогите для этого кода написать компилятор ...

Требуется помощь в написании программы (Фортран 77)
Дана последовательность чисел А размерности N. Найти сумму членов этой последовательности, не превосходящую заданное число К, в которую...

Требуется помощь с задачей
Формулировка: В массиве хранятся сведения о количестве осадков, выпавших за каждый день июня. Определить общее количество осадков,...

3
Модератор
 Аватар для Curry
5158 / 3482 / 536
Регистрация: 01.06.2013
Сообщений: 7,549
Записей в блоге: 9
28.08.2024, 00:47
Лучший ответ Сообщение было отмечено Score999 как решение

Решение

Go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package main
 
import (
    "fmt"
)
 
func canProvideCoverage(N int, X int, S string) bool {
    // Массив для отслеживания покрытия кооперативов
    coverage := make([]bool, N)
 
    // Проходим по всем вышкам
    for i := 0; i < N; i++ {
        if S[i] == '1' {
            // Обеспечиваем связь кооперативам слева
            for j := 1; j <= X && (i-j) >= 0; j++ {
                coverage[i-j] = true
            }
            // Обеспечиваем связь кооперативам справа
            for j := 1; j <= X && (i+j) < N; j++ {
                coverage[i+j] = true
            }
        }
    }
 
    // Проверяем, есть ли покрытие для всех кооперативов
    for i := 0; i < N; i++ {
        if S[i] == '0' && !coverage[i] {
            return false // Если вышка не работает и нет покрытия, возвращаем false
        }
    }
    return true // Все кооперативы имеют покрытие
}
 
func main() {
    N := 5
    X := 1
    S := "10001"
 
    if canProvideCoverage(N, X, S) {
        fmt.Println("Yes")
    } else {
        fmt.Println("No")
    }
}
2
 Аватар для alhaos
1929 / 545 / 154
Регистрация: 20.02.2019
Сообщений: 2,664
Записей в блоге: 65
28.08.2024, 08:06
Можно поискать неработающую вышку в пределах покрытия которой нет ни одной работающей вышки, есть вероятность, что не придется всю строку перебирать.

Go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
func canProvideCoverage(data string, x int) bool {
    var l, h, length int
 
    length = len(data)
 
    for i := 0; i < length; i++ {
        l, h = max(0, i-x), min(i+x+1, length)
        slog.Info("variables:", "index", i, "data", data[l:h])
        if !strings.Contains(data[l:h], trueChar) {
            return false
        }
    }
    return true
}
Go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
func TestCanProvideCoverage(t *testing.T) {
    data := []struct {
        s        string
        x        int
        expected bool
    }{
        {s: "1001", x: 0, expected: false},
        {s: "1001", x: 1, expected: true},
    }
 
    for _, datum := range data {
        result := canProvideCoverage(datum.s, datum.x)
        if result != datum.expected {
            t.Errorf("for input s=%s, x=%d, expected %v, got %v", datum.s, datum.x, datum.expected, result)
        }
    }
}
Code
1
2
PASS
ok      once    0.080s
1
Эксперт JS
 Аватар для DrType
6553 / 3624 / 1075
Регистрация: 07.09.2019
Сообщений: 5,877
Записей в блоге: 1
29.08.2024, 14:25
Ну или регулярками.
Go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import (
    "fmt"
    "regexp"
)
 
func canProvideCoverage(s string, x int) bool {
    var match bool
    if x == 0 {
        match, _ = regexp.MatchString("0", s)
    } else {
        match, _ = regexp.MatchString(fmt.Sprintf("(0|^)0{%d}|0{%d}(0|$)", x+1, x+1), s)
    }
    return !match
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.08.2024, 14:25
Помогаю со студенческими работами здесь

Помощь с задачей
Всем доброго времени суток. Вот пытаюсь решить задачу из Задания 2 и застрял на 6 пункте, какую формулу нужно ввести, чтобы все работало,...

Помощь с задачей
Приветствую знатоков. Я пытаюсь решить задачу. Сама задача: Составьте Блок схему алгоритма на языке “Basic” для решения задачи включающий...

Помощь с задачей с символами
даны 3 двухбуквенных слога.составьте из них возможные сочетание.(перебрав все варианты) взять на пример ко ро ва. Буду оч благодарен за...

нужна помощь с задачей
можите помочь с одной задачкой?? буду благодарен... вот условие: Реалізація циклічних програм на Асемблері(обробка матриці:знайти...

Нужна помощь с простой задачей по VB
Tovari64i programisti! Znaju, 4to dlja vas eto sovsem prostenjkaja zada4ko, a vot ja sovsem ne pru v VB,no pozarez v njem samom nuzhna...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru