powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Перебор не занятых шаров
7 сообщений из 32, страница 2 из 2
Перебор не занятых шаров
    #39701441
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а в функции то он откуда возьмётся?
...
Рейтинг: 0 / 0
Перебор не занятых шаров
    #39701473
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
полудуха в функции то он откуда возьмётся?
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
private void buttonEnter_Click(object sender, EventArgs e)
{  
   if (ball_number < 20)
   {
       mslseq[box_number] = ball_number;
       selected[ball_number] = 1;
   }

........................................................
}
...
Рейтинг: 0 / 0
Перебор не занятых шаров
    #39701535
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пардон, это C#, я думал С++
...
Рейтинг: 0 / 0
Перебор не занятых шаров
    #39701771
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
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.
using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApp4
{
    class Program
    {
        const int BALLS_COUNT = 19;
        
        static void Main(string[] args)
        {
            Console.CursorVisible = false;
            int balls = 0;
            int selected = 0;
            int bucketNumber = 1;
            int count = BALLS_COUNT;
            ConsoleKeyInfo key;
            do
            {
                Console.SetCursorPosition(0, 0);
                Console.WriteLine($"Bucket #{bucketNumber}:");
                PrintBalls(balls, selected);
                key = Console.ReadKey(true);
                switch (key.Key)
                {
                    case ConsoleKey.Enter when count > 0:
                        balls = TakeBall(balls, selected);
                        bucketNumber++;
                        count--;
                        if (selected >= count) selected = count - 1;
                        break;
                    case ConsoleKey.UpArrow when selected > 0:
                        selected--;
                        break;
                    case ConsoleKey.DownArrow when selected < count - 1:
                        selected++;
                        break;
                }

            } while (key.Key != ConsoleKey.Escape && count > 0);
            Console.Clear();
            Console.WriteLine($"Press any key to contine...");
            Console.ReadKey(true);
        }

        static void PrintBalls(int balls, int selectedIndex)
        {
            var ballsEnum = GetBalls(balls);
            int index = 0;
            foreach (var ballIndex in ballsEnum)
            {
                if (index == selectedIndex)
                {
                    Console.BackgroundColor = ConsoleColor.Green;
                    Console.ForegroundColor = ConsoleColor.Black;
                }
                Console.WriteLine($"\t{ballIndex + 1}\t");
                Console.ForegroundColor = ConsoleColor.Gray;
                Console.BackgroundColor = ConsoleColor.Black;
                index++;
            }
            Console.WriteLine($"\t\t");
        }

        static int TakeBall(int balls, int selectedIndex)
        {
            var realIndex = GetBalls(balls).Skip(selectedIndex).Take(1).First();
            return balls | 1 << realIndex;
        }

        static IEnumerable<int> GetBalls(int balls)
        {
            for(int index = 0; index < BALLS_COUNT; index++)
            {
                var value = balls >> index & 1;
                if (value == 0)
                {
                    yield return index;
                }
            }
        }        
    }
}
...
Рейтинг: 0 / 0
Перебор не занятых шаров
    #39701904
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman Mejtes,
я такими прелестями типа этого
Код: c#
1.
var realIndex = GetBalls(balls).Skip(selectedIndex).Take(1).First();


воспользоваться не могу :). мне это в голый С портировать надо :)
...
Рейтинг: 0 / 0
Перебор не занятых шаров
    #39702361
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
алгоритм прост, в базисе два набора:
X - один полный (в частном случае можно диапазоном), 1..19
Y - другой пополняемый того что уже выбрали (для каждого цикла к массиву Y++)
Z - третий виртуальный остаток : как разница между первым и вторым (это и будут действительные варианты для данного шага)
в общем: Z=X-Y, в начале цикла Y=null, Z=X, по завершению X=Y & Z=null (т.е. все варианты исчерпаны)
в частности на шаге n выбор ограничивается вариантами из Z: Z(n)=X-Y(n-1)
где вектор Y пополняется значением выбранным на предыдущем шаге, т.е. Y(n-1)=Y(n-2)+{выбранное значение остатка набора, т.е. валидация данных}
Set Operations (C#)
...
Рейтинг: 0 / 0
Перебор не занятых шаров
    #39702383
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если без валидации данных (на не текст/только целое и на принадлежность к исходному и остаточному списку) то можно в консоли C# так по быстрому:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
using System;using System.Collections.Generic;
using System.Linq;namespace list_elimination
{class Program{static void Main(string[]args){
List<int>x=new List<int>();for(int i=1;i<=19;i++){x.Add(i);};
List<int>y=new List<int>();for(int j=1;j<=x.Count();j++)
{Console.WriteLine("Iteration: "+Convert.ToInt16(j));if(y.Count()>0){
Console.WriteLine("Used values: "+string.Join(";",y.OrderBy(n=>n)));};
Console.WriteLine("Available values: "+string.Join(";",x.Except(y)));
Console.WriteLine("Input new integer value: ");
y.Add(Convert.ToInt16(Console.ReadLine()));Console.Clear();};
if(x.Except(y).Count()>0)
{Console.WriteLine("Done, list of values left: "+string.Join(";",x.Except(y)));}
else{Console.WriteLine("Done, all values in list were used");};
Console.WriteLine("Press any key to exit");Console.ReadKey();}}}
...
Рейтинг: 0 / 0
7 сообщений из 32, страница 2 из 2
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Перебор не занятых шаров
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]