Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 11.11.2014
Сообщений: 6

Задача Robot. Найти количество единичных квадратов, на которых робот побывал более одного раза

11.11.2014, 01:38. Показов 1766. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача Robot. Робот находится на плоскости, которая разбита на единичные квадраты. Робот может двигаться в четырех направлениях на соседний квадрат (R–вправо, L–влево, U–вверх, D–вниз). Задана последовательность ходов работа. Определить количество единичных квадратов, на которых робот побывал более одного раза.

Технические условия. Программа Robot считывает из устройства стандартного ввода строку символов - последовательность ходов, длиной не более 1000. Программа выводит на устройство стандартного вывода единственное число – искомую величину.

Пример

Ввод RLLRR

Вывод 2
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.11.2014, 01:38
Ответы с готовыми решениями:

Найти количество слов, в которых заданная буква встречается более одного раза
Помогите пожалуйста. Дано срока.В заданной строке определить количество слов, в которых заданная буква встречается более одного раза.

найти число клеток плоскости, которые робот посетит более одного раза
Задача Робот Робот Р-2008-2009 предназначен для исследования просторов Флатландии, которые, как извест- но, представляют собой...

В заданной строке найти количество слов, в которых заданная буква встречается более одного раза.
Помогите пожалуйста. Дано срока.В заданной строке найти количество слов, в которых заданная буква встречается более одного раза.

7
 Аватар для Людвиг Бодмер
378 / 375 / 213
Регистрация: 29.03.2013
Сообщений: 867
11.11.2014, 13:54
opst0r, вот я тут придумал вариант, наверняка неоптимальный, можно рассматривать как псевдокод:
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
#include <iostream>
 
int main()
{
char str[128]; 
int mas [256][256]; // массив с координатами передвижения, в элементах которого будут храниться числа, обозначающие сколько раз мы были в этих точках
memset(mas, 0, sizeof(mas));
int i,j;
int count=0;
int a=128;
int b=128;
mas[a][b]=1; // считаем, что мы первоначально находимся в точке (128,128), устанавливаем единицу, которая означает, что мы один раз уже были в этой точке
std::cin.getline(str, 128);
for(i=0; i<strlen(str); i++)
    {
        switch (str[i]) 
        {
            case 'L':
                a--;
                break;
            case 'R':
                a++;
                break;
            case 'U':
                b++;
                break;
            case 'D':
                b--;
                break;
        }
        (mas[a][b])++; 
    }
for(i=0; i<256; i++)
    for(j=0; j<256; j++)
    {
        if (mas[i][j]>1) 
            {
                count++;
            }
    }
    std::cout<<count<<"\n";
    std::system("pause");
return 0;
}
Здесь входная строка из расчета 128 символов, с 1000 у меня получается stack overflow для двумерного массива.
1
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
11.11.2014, 14:06
Людвиг Бодмер, за 1000 ходов мы максимум посетим 1000 клеток, согласны? Зачем требовать память на 2000*2000 остальных нулей, да еще в интах?
2
 Аватар для Людвиг Бодмер
378 / 375 / 213
Регистрация: 29.03.2013
Сообщений: 867
11.11.2014, 14:27
_Ivana, ну 1000 ходов можно же отложить вправо от исходной точки, а можно влево, т.е. получается от -1000 до +1000. Также вверх и вниз. Это исходя из моей координатной логики. Может она тут и неверна и нужен другой подход. А состояния нужны 3 типов: 0(не посещенная клетка), 1(посещена 1 раз), >1(посещена больше одного раза). Какой тогда тип данных выбрать? char или short int?
1
5 / 3 / 1
Регистрация: 06.11.2014
Сообщений: 33
11.11.2014, 14:30
Думаю, имелось ввиду, что намного выгоднее завести массив длины "количество ходов", и в соответствующую ячейку записывать текущие координаты трактора. А потом в этом массиве найти элементы повторяющиеся несколько раз.
2
221 / 166 / 47
Регистрация: 17.07.2012
Сообщений: 587
11.11.2014, 14:32
Лучший ответ Сообщение было отмечено opst0r как решение

Решение

извините я не стал удалять шаблон)

C++ (Qt)
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <algorithm>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <vector>
#include <string>
#include <cstring>
#include <cmath>
#include <ctime>
#include <cassert>
 
using namespace std;
 
#define forn(i, n) for(int i = 0; i < (int)(n); i++)
#define pb push_back
#define mp make_pair
#define all(a) (a).begin(), (a).end()
#define sz(a) (int)((a).size())
#define X first
#define Y second
#define sqr(x) (x) * (x)
#define y1 __y1
#define endl '\n'
 
typedef long long li;
typedef long double ld;
typedef pair<int, int> pt;
 
const int INF = (int)(1e9);
const li INF64 = (li)(INF) * (li)(INF);
const ld eps = 1e-9;
const ld PI = (ld)(3.1415926535897932384626433832795);
 
const int dx[] = {-1, -1, 0, 1, 1, 1, 0, -1};
const int dy[] = {0, 1, 1, 1, 0, -1, -1, -1};
 
bool in(int i, int j, int n, int m)
{
    return i >= 0 && i < n && j >= 0 && j < m;
}
 
inline int myrand()
{
    return rand() ^ (rand() << 15);
}
 
int main(){
#ifdef _DEBUG
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
#endif
 
    cout << setprecision(12) << fixed;
    cerr << setprecision(10) << fixed;
    
    srand(int(time(NULL)));
 
    map<pair<int, int>, int> cnt;
 
    cnt[make_pair(0, 0)] = 1;
    int x = 0, y = 0;
 
    string s;
    getline(cin, s);
    int n = s.length();
 
    for(int i = 0; i < n; i++)
    {
        char c = s[i];
        if(c == 'L')
            x--;
        if(c == 'R')
            x++;
        if(c == 'U')
            y++;
        if(c == 'D')
            y--;
 
        cnt[make_pair(x, y)]++;
    }
 
    int ans = 0;
    for(map<pair<int, int>, int>::iterator it = cnt.begin(); it != cnt.end(); it++)
        ans += (it->second > 1);
 
    cout << ans << endl;
 
    return 0;
}
1
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
11.11.2014, 14:42
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
#include <iostream>
#include <algorithm>
#include <utility>
#include <map>
 
int main() {
    std::map<std::pair<int,int>,int> coords;
    char cmd;
    int count = 0;
    int x = 0, y = 0;
    std::pair<int, int> current = std::make_pair(0, 0);
 
    coords[current] = 1;
    while (std::cin >> cmd) {
        bool skip = false;
        switch (cmd) {
        case 'U':
            ++current.second;
            break;
        case 'D':
            --current.second;
            break;
        case 'R':
            ++current.first;
            break;
        case 'L':
            --current.first;
            break;
        default:
            skip = true;
            break;
        }
        if (skip == false) {
            coords[current]++;
            if (coords[current] == 2) {
                ++count;
            }
        }
    }
    std::cout << count;
    return 0;
}
1
0 / 0 / 0
Регистрация: 11.11.2014
Сообщений: 6
11.11.2014, 19:52  [ТС]
Всём большое спасибо)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.11.2014, 19:52
Помогаю со студенческими работами здесь

Подсчитать количество слов, у которых первая буква встречается более одного раза
Введите строку символов, разделенных пробелами. Подсчитайте количество слов, у которых первая буква встречается более одного раза.

Количество различных чисел, каждое из которых встречается в матрице более одного раза
ребят помогите задание не получается. Сформировать случайным образом матрицу размерности 5х4 . Подсчитать количество одинаковых чисел ...

В заданной строке определить количество слов, в которых заданная буква встречается более одного раза
Помогите пожалуйста с заданием !Задание : В заданной строке определить количество слов,в которых заданная буква встречается более одного...

В тексте найти все слова, у которых буква встречается более одного раза
Задача: В тексте найти все слова, у которых буква встречается более одного раза. Записать их в новый текст. В этом тексте слова...

Найти в тексте слова, в которых вторая буква справа встречается более одного раза.
Здраствуйте, нужна помощь в такой задачке: вводитса строка в строке слова разделяющиеся пробелом в конце стоит точка надо вивести на екран...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера 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