3 / 3 / 1
Регистрация: 14.02.2016
Сообщений: 126
1

Считалочка с использованием списка(класс List<>)

12.03.2017, 14:31. Показов 2104. Ответов 9
Метки нет (Все метки)

9.«Считалка». N ребят стоят по кругу. Начав отсчет от первого, удаляют каждого К-го, смыкая круг после каждого удаления. Определить, кто остался последним.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.03.2017, 14:31
Ответы с готовыми решениями:

Считалочка с использованием списка
«Считалка». N ребят стоят по кругу. Начав отсчет от первого, удаляют каждого К-го, смыкая круг...

Класс List. Из списка структур получить список значений одного поля
например, есть структура struct UserInfo { public string Name; public string...

Создать класс Элемент списка (Node), а затем класс Список (List)
Задание: Создать класс Элемент списка (Node), а затем класс Список (List). В зависимости от...

Класс с использованием list
Не получается разобраться с программой (ошибки при компиляции). #include &lt;iostream&gt; #include...

9
55 / 55 / 51
Регистрация: 05.07.2016
Сообщений: 179
12.03.2017, 15:06 2
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
static void Main(string[] args)
        {
            List<int> list = new List<int>();
            int n = Convert.ToInt32(Console.ReadLine());
            for (int i = 1; i <= n; i++)
                list.Add(i);
            int k=Convert.ToInt32(Console.ReadLine())-1;
            while (list.Count != 1) { 
                int z=k;
                while (z >= list.Count) z -= list.Count;
                list.RemoveAt(z);
            }
            Console.WriteLine(list[0]);
        }
0
269 / 253 / 186
Регистрация: 28.10.2015
Сообщений: 723
13.03.2017, 09:34 3
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using System;
 
class Program
{
    public static void Main()
    {
        int n = 10;
        int k = 3;
        int s = 0;
        for (int i = 2; i <= n; ++i)
        {
            s = (s + k) % i;
        }
        Console.WriteLine(s + 1);
    }
}
0
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
13.03.2017, 09:50 4
ata,
В кругу десять ребят:
Код
1 2 3 4 5 6 7 8 9 10
3
RemoveAt: 3
1 2 4 5 6 7 8 9 10
3
RemoveAt: 5
1 2 4 5 7 8 9 10
3
RemoveAt: 7
1 2 4 5 7 8 10
3
RemoveAt: 2
1 4 5 7 8 10
3
RemoveAt: 5
1 4 5 7 10
3
RemoveAt: 3
1 4 7 10
3
RemoveAt: 3
1 4 10
3
RemoveAt: 2
1 10
3
RemoveAt: 1
10
В итоге останется 10-й ребенок, но не 4.
0
269 / 253 / 186
Регистрация: 28.10.2015
Сообщений: 723
13.03.2017, 10:32 5
У Вас ошибка, не хочу даже выяснять где. Неинтересно. То, что для n = 10, k = 3 решением является число 4, даже в Википедии упомянуто...
0
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
13.03.2017, 12:36 6
Искать свою ошибку не стал, написал с 0. Там было старое решение, и на 5 итерации там получался не нужный сдвиг...

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
        List<int> list = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
 
        int count = list.Count - 1;
        int removeAt, k = 3;
        removeAt = k;
        removeAt--;
 
        for (; count > 0;)
        {
            Console.WriteLine(removeAt + " " + list[removeAt]);
 
            list.RemoveAt(removeAt);
 
            Console.WriteLine(string.Join(" ", list));
 
            removeAt = (removeAt + k - 1) % count;
            count--;
        }
 
        Console.WriteLine();
        Console.WriteLine(removeAt + " " + list[removeAt]);
        Console.ReadKey();
Ну и наглядный пример:
Код
2 3
1 2 4 5 6 7 8 9 10
4 6
1 2 4 5 7 8 9 10
6 9
1 2 4 5 7 8 10
1 2
1 4 5 7 8 10
3 7
1 4 5 8 10
0 1
4 5 8 10
2 8
4 5 10
1 5
4 10
1 10
4

0 4
Добавлено через 25 минут
Цитата Сообщение от EveKS Посмотреть сообщение
C#
1
2
removeAt = k;
 removeAt--;
C#
1
removeAt = (k - 1) % (count + 1);
1
3 / 3 / 1
Регистрация: 14.02.2016
Сообщений: 126
13.03.2017, 13:12  [ТС] 7
к сожалению,мне нужно,чтобы после каждого удаления элемента K снова нужно вводить с клавиатуры.
То еть не фиксированно каждый 3-ий,а какой нибудь новый

Добавлено через 6 минут
Например,если пользователь следующим укажет 25 ,то нужно "пробежать" по списку и удалить К-ый элемент
т.е. например
1 2 3 4 5 6 7 8 9 10
К= 25
1 2 3 4 6 7 8 9 10
K=8
1 2 4 6 7 8 9 10
и так далее
0
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
13.03.2017, 13:30 8
Лучший ответ Сообщение было отмечено Cyberlol как решение

Решение

Cyberlol, Что мешает сделать так:
Заменить 3 на int.Parse(Console.ReadLine())
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
using System;
using System.Collections.Generic;
 
class Program
{
    static void Main()
    {
        List<int> list = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
 
        int count = list.Count;
        int removeAt = 0;
 
        for (; count > 0;)
        {
            int k = int.Parse(Console.ReadLine());
            removeAt = (removeAt + k - 1) % count;
 
            Console.WriteLine("RemoveAt: {0}, element {1}", removeAt, list[removeAt]);
 
            list.RemoveAt(removeAt);
 
            Console.WriteLine("List: {0}", string.Join(" ", list));
 
            count--;
        }
 
        Console.WriteLine("End.");
        Console.ReadKey();
    }
}
1
269 / 253 / 186
Регистрация: 28.10.2015
Сообщений: 723
13.03.2017, 13:43 9
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using System;
using System.Linq;
using System.Collections.Generic;
 
class Program
{
    public static void Main()
    {
        Queue<int> q = new Queue<int>(Enumerable.Range(1, Int32.Parse(Console.ReadLine())));
        while (q.Count != 1)
        {
            for (int i = Int32.Parse(Console.ReadLine()); i > 1; --i)
            {
                q.Enqueue(q.Dequeue());
            }
            q.Dequeue();
        }
        Console.WriteLine(q.Dequeue());
    }
}
1
3 / 3 / 1
Регистрация: 14.02.2016
Сообщений: 126
13.03.2017, 14:17  [ТС] 10
спасибо,вроде бы работает)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.03.2017, 14:17
Помогаю со студенческими работами здесь

Std::list Удалить элемент если тип списка собственный класс
Подскажите как удалить нужный элемент! И неплохо бы было узнать как обращаться к полям объекта в...

Определить предикат Р(List,Х) который истинен если Х состоит из пар элементов списка List,сумма которых больше половины элементов List
Помогите пожалуйста написать программу,буду очень благодарен,заранее спасибо! Определить предикат...

Вывод списка. Программа "Считалочка"
Здавствуйте. Вот такая задача: Вокруг ведущего стоит N человек, из которых выделен первый, а...

Преобразование списка list в *list
Здравствуйте я создал список (массив списков), но не могу вытащить элементы этого списка (т.е. ,...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru