Форум программистов, компьютерный форум CyberForum.ru

помогите написать лабу - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Поиск звена с элементом el в списке, заданном указателем phead http://www.cyberforum.ru/cpp-beginners/thread50022.html
#include<iostream> using namespace std; class Spisok { private: struct node { int elem; node *sled; };
C++ Перегрузка функции Что такое перезагрузка функции в с++? Для чего она нужна? Есть случаи, когда без нее никак? Приведите пример перезагрузки функции? Тут есть перезагрузка? static int Square(int var) { return (var * var); } static long Square(long var) http://www.cyberforum.ru/cpp-beginners/thread50007.html
Динамическое очищение массива C++
Помогите пжлст) Нужно в программе при определенных обстоятельствах очистить массив. char n;
C++ Реверсирование строк
Всем добрый вечер! Как всегда, практикуюсь по книжным примерам. Вот дошёл до темы реверсирования строк, то есть расположения букв в обратном порядке. Столкнулся с таким кодом, и не ясен стал цикл,то есть как именно происходит замена букв в нём? Если кто может, подскажите,если не сложно? Не ясен сам цикл, и строка перед ним: end = &str; Заранее благодарю. Вот исходник: #include...
C++ Найти корень квадратного уравнения http://www.cyberforum.ru/cpp-beginners/thread49983.html
Люди помогите решить программу з оператором (if) Задание: Знайти корень квадратного уравнения!!!!!
C++ Магический квадрат и другие задачи здравствуйте. Мне очень не обходима ваща помощь в следуших заданиях. 1. Дана целая квадратная матрица n-го порядка. Определить, является ли она магическим квадратом, т.е. такой, в которой суммы элементов во всех строках и столбцах одинаковы. 2. Определить натуральное число не больше заданного n с наибольшей суммой делителей. Исполь-зовать функцию вычисления суммы делителей числа 3. Написать... подробнее

Показать сообщение отдельно
kravam
быдлокодер
1691 / 878 / 44
Регистрация: 04.06.2008
Сообщений: 5,423
13.09.2009, 05:40     помогите написать лабу
Цитата Сообщение от _mayor Посмотреть сообщение
полный перебор практически сразу отпадает 100! переставновок завесят любой комп
Естественно.
...Тем не менее, других алгоритмов я не вижу.
А некоторые остряки штатские видят, но молчат с умным видом. Дескать, знаем, но не скажем.
Пусть реализую формулировку

"остальные xi сильно меньше". (odipовский перл)
тогда и будем говорить.

Но слоловья баснями не кормят.
Короче, вот моё НЕПОЛНОЕ решение с рекурсией.

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
#include <stdio.h>
#include <windows.h>
#include <ctype.h>
#define kolichestvo_chisel 8
#define kolichestvo_drugih_chisel 5
using namespace std;
 
unsigned char stroka []= {11, 18, 23, 41, 56, 98, 14, 92};
 
 
void func_recurs (int nomer_funktsii, int nomer_elementa, int kol_ostavshihsa_chisel) {
 
static int summa= 0; 
 
 for (int i= nomer_elementa; i< kolichestvo_chisel- kol_ostavshihsa_chisel+ 1; i++) {
 
  if (nomer_funktsii< kolichestvo_drugih_chisel- 1) {
   summa= summa+ stroka [i];
   func_recurs (nomer_funktsii+ 1, i+ 1, kol_ostavshihsa_chisel- 1);
   summa= summa- stroka [i];
  }
 
  else {
   summa= summa+ stroka [i];
   printf ("sumam= %d\n ", summa);
   summa= summa- stroka [i];
  }
 }
}
 
 
int main () {
 
 func_recurs (0, 0, kolichestvo_drugih_chisel);
 
 
 getchar ();
 return 0;
}
Пояснения будут таковы: имеется ряд чисел.
C#
1
unsigned char stroka []
К такому виду надлежит привести введённоее число вида "ADE234GEA"
Как- это пусть тредстартер думает.

Далее, если чисел нечётное число или их сумма нечётна, написать, что решения нет.
Теперь нужно прописать количество чисел. Это может сделать программно, подсчитав их, можно вручную.
В моём примере это сделано в макросе
C++
1
#define kolichestvo_chisel
В макросе же прописано другое количество.
C++
1
#define kolichestvo_drugih_chisel
И оно всякий раз уменьшается при вызове функции
Для тредстартерского примера его начальное значение равно

kolichestvo_chisel/2

То есть половина будет. Если чисел 40, то половина будет 20.

Эта функция выдаёт на гора все суммы пятёрок, шестёрок- двадцаток и так далее, кто что пожелает.
Задача тредтстартера ВРУЧНУЮ найти половину (SUM) суммы и каждый раз сравнивать выведенную сумму с SUM. Предварительно сохранив номера элементов массива stroka. Допустим, однажды суммы сравнялись. Ага, номера известны. Теперь заполняй новый массив последвательно элементами с такими нормеами, и потом с оставшимися номерами. Это всё автор пусть сам делает.

...Ну, а моя функция работает так.
Каждый раз в функции рассматривается ПОДМАССИВ последовательно идущих чисел и ищется его сумма.

Допустим, массив чисел такой
12, 34, 56, 67, 34, 56, 100, 12, 45, 100, 23,


а подмассив такой
12, 34, 56, 67, 34, 56, 100, 12,

С помощью нехитрых манипуляций вызывается рекурсивно эта же функция, работающая уже с таким подмассивом
34, 56, 67, 34, 56, 100, 12,

потом с таким
56, 67, 34, 56, 100, 12,

и так далее, пока не останется число 12.
Теперь к сумме последовательно прибавляется и отнимается число 12, потом 45, 100 и 23
Следующий расассматриваемый подмассив будет (благодаря циклу)
100, 12

Вот так по функциям проходим и ищем сумму. Ну, там ещё каждый раз функция принимает служебные аргументы- номер функции, номер элемента (имеется ввиду индекс в stroka) и сколько элементво осталось прибавить.

Автор, вопрос на соображение. И всем тоже.
Значит, задача поставлена, условие известно.
Если решение есть (что не факт), я могу со стопроцентной вероятностью указать одно его число.
Не примерно, не скорее всего, а именно 100 процентов, что это число (шестнадцатиричная цифра) будет присутствовать в ответе.

Какое это число?

Ну, всё, пока.
P. S. Предыдущий алгоритм представлял бы интерес с комментариями какими-нибудь, что ли...
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru