Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
16 / 16 / 8
Регистрация: 14.01.2013
Сообщений: 545
Записей в блоге: 2

Равномерная раскладка числа N на K позиций

21.12.2017, 01:25. Показов 1350. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет, задача: Сгенерировать случайное число N и разложить на K позиций.
Я сделал вот такой код.
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
        static private List<int> list = new List<int>();
        private static double MinCoff = 0.14;
        private static double MaxCoff = 0.63;
        private static Random random = new Random();
 
        private static void res(int value, int couts)
        {
            int numbers = value;
            int num = 0;
 
            for(int i = -1; i < couts; i++)
            {
                num = GetRendomNumer(value);
                if(num >= numbers)
                {
                    i = -1;
                    list.Clear();
                    numbers = value;
                    continue;
                }
                if(i == couts-1)
                {
                    list.Add(numbers);
                    break;
                }
                numbers -= num;
 
                list.Add(num);
            }
 
            int sum = list.Sum();
            Console.WriteLine("Сумма: " + sum.ToString());
            
 
            for (int i = 0; i < list.Count; i++)
            {
                Console.Write(list[i].ToString());
                if (i != list.Count - 1)
                    Console.Write(" + ");
            }
            list.Clear();
            Console.Write("\n");
            Console.WriteLine("/////////////////////");
        }
 
        private static int GetRendomNumer(int value)
        {
            int Min = (int)(value * MinCoff);
            int Max = (int)(value * MaxCoff);
            int rn = random.Next(Min, Max);
            return rn;
        }
 
 
        static void Main(string[] args)
        {
            int C_COFRandom = 1;
            int value = 0;
            for (int i = 0; i < 100; i++)
            {
                value = random.Next(32, 189 * C_COFRandom);
                Console.WriteLine("Число: " + value.ToString());
                res(value, 6);
                System.Threading.Thread.Sleep(1000);
            } 
             Console.ReadLine();
        }
Он раскладывает число вот так:
XML
1
2
3
4
5
6
7
8
Число 94
16+16+13+13+19+17
 
Число 42
5+14+5+5+5+8
 
Число 87
13+12+12+18+15+17
Если приглядеться числа в этом диапазоне среднее, то есть если разложить число 30 будет вот так.
5+5+5+5+5+5

Хочу добавить коэффициент, чтобы числа раскладывались так.
Число 30
10+3+3+4+5+5

Во общем, чтобы числа были не равномерны в каждой позиции при раскладки. Эту равномерность хочу сделать зависимой от некого коэффициента. Подскажите, что нужно подшаманить в моем коде?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.12.2017, 01:25
Ответы с готовыми решениями:

Циклический сдвиг числа на k позиций
Что-то никак задачка не получается. Сдвигать просто массив циклически умею, но никак не получается сдвинуть его с указанной позиции и...

Составить 2 функции. Одна из функций циклически сдвигает массив длины N вправо на k позиций, а другая - на k позиций вле
Составить 2 функции. Одна из функций циклически сдвигает массив длины N вправо на k позиций, а другая - на k позиций влево. 1. Составить...

Указатель: Сдвинуть числа в матрице заданного размер n * n на k позиций вправо
Нужно сдвигать числа в матрице заданного размер n*n на k единиц направо Сделать это нужно через функцию,я это сделал,но нужно...

6
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
21.12.2017, 01:44
ну круто, чЁ..
C#
1
я вот хочу написать алгоритм расчета формулы абсолютного топлива! не подскажешь как?
на ЯПе можно только реализовать алгоритм, сам алгоритм уже должен существовать! есть такой алгоритм разложения?
если есть - следуй ему, если нет - придумай, математически обоснуй, опиши...а после этого и подсказки не нужны будут
0
16 / 16 / 8
Регистрация: 14.01.2013
Сообщений: 545
Записей в блоге: 2
21.12.2017, 01:49  [ТС]
Diamante, Я не знаю существуют ли такие алгоритмы, этот алгоритм в моей программе придумал я сам.
0
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
21.12.2017, 01:58
updaite, ну так опиши его полностью, словами,схемами, еще как-то... а то, получается,"я придумал, икс знает зачем икс знает что", и теперь не могу это реализовать...
З.Ы. икс замени на "х.."
0
16 / 16 / 8
Регистрация: 14.01.2013
Сообщений: 545
Записей в блоге: 2
21.12.2017, 02:18  [ТС]
Diamante, Опишу словами: Генерируем случайное число N, делаем цикл с K(Позиций раскладки числа) повторений цикла. В этом цикле генерируем случайное число в диапазоне N1 = N14% > N < N63%. После в этом цикле проверяем N1 > N если да, то обнуляем все вычисления и начинаем сначала, если нет то, вычитаем N-N1 и проверяем, если количество обходов цикла равно K-1, то добавляем число N в список, если нет, добавляем число N1 в список.
0
 Аватар для Aferuga
645 / 529 / 324
Регистрация: 20.05.2015
Сообщений: 1,471
21.12.2017, 07:19
Лучший ответ Сообщение было отмечено updaite как решение

Решение

Такого метода разве не достаточно?
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        private int[] getRandomSum(int n, int pos)
        {
            Random rand = new Random();
            int max = (n-pos);
            int last = n;
            int[] result = new int[pos];
            for (int i = 0; i < pos-1; i++)
            {
                result[i] = rand.Next(1,max);
 
                max = max+i  - result[i];
                last = last - result[i];
            }
            result[pos - 1] = last;
            return result;
        }


Добавлено через 17 минут
Ну или так если не устраивает порядок в массиве:
Кликните здесь для просмотра всего текста
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
        private List<int> getRandomSum(int n, int pos)
        {
            Random rand = new Random();
            int max = (n-pos);
            int last = n;
            List<int> result = new List<int>();
            for (int i = 0; i < pos-1; i++)
            {
               result.Add(rand.Next(1,max));
 
                max = max+i  - result[i];
                last = last - result[i];
            }
            result.Add(last);
 
            return orderNew(result);
        }
 
        public List<int> orderNew(List<int> li_old)
        {
            Random rand = new Random();
            List<int> li_new = new List<int>();
 
            for (int i = li_old.Count; i > 0; i--)
            {
                int ind = rand.Next(0, li_old.Count);
                li_new.Add(li_old[ind]);
                li_old.RemoveAt(ind);
            }
            return li_new;
        }
0
16 / 16 / 8
Регистрация: 14.01.2013
Сообщений: 545
Записей в блоге: 2
21.12.2017, 19:38  [ТС]
Aferuga, Я тоже подумывал сделать (Сортировку окончательного массива), спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.12.2017, 19:38
Помогаю со студенческими работами здесь

Определение вторых по значению минимального и максимального числа и их позиций в файле
Изменить программу так что-бы она определяла вторые по значению минимальное и максимальное числа и их позиции в файле(она определяет...

Вывести на экран первые три степени целого числа, а с разных позиций
Задача №1. Вывести на экран первые три степени целого числа, а с разных позиций. Задача №2. Вывести на экран первые три степени...

Осуществить циклический сдвиг n-разрядного двоичного представления заданного числа k на m позиций вправо
Задание: Осуществить циклический сдвиг n-разрядного двоичного представления заданного числа k на m позиций вправо, не находя цифр самого...

Бинарные файлы: на место тех позиций, у которых значение меньше определенного числа, записать 0
Здравствуйте! У меня проблема: есть созданный бинарный файл и я не могу у него заменять определенный позиции на другие. Т.е. вот задание:...

Равномерная непрерывность
Доказать,что \sin \left({x}^{2} \right) непрерывна \forall {x}_{0}. Означает ли это,что нужно доказать,что функция равномерно...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru