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

Задачка - крепкий орешек про линейку - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Сформировать вектор из суммы наибольших и наименьших значений элементов строк данной матрицы http://www.cyberforum.ru/cpp-beginners/thread693870.html
Составить алгоритм обработки матрицы А типа short размером М х N (М≤10 строк, N≤10 столбцов). Значения М и N ввести с клавиатуры с проверкой на допустимые значения. Преду-смотреть возможность ввода...
C++ Найти произведение квадратов первых k элементов массива A={a[i]} В программе должны быть предусмотрены функции ввода-вывода элементов вектора и его обработки. Исходные данные должны вводиться корректно и с проверкой на область допустимых значений. Тип результата... http://www.cyberforum.ru/cpp-beginners/thread693869.html
C++ Определить произведение наибольшего и наименьшего чисел
Вводятся вещественные числа типа float, большие или равные 0, пока не будет введено отрицательное число. Подсчитать, сколько всего будет введено чисел, и определить произведение наибольшего и...
Виртуальные функции C++
Разработать программу с использованием наследования классов, реализующую классы: Земноводное(ареал обитания)->Крокодил(род, длина, вес) ->Лягушка(род,...
C++ одномерный массив http://www.cyberforum.ru/cpp-beginners/thread693858.html
Дан массив вещественных случайных чисел.рамзер массива определяет пользователь но в пределах найти число чисел из диапазона код для Dev-cpp пожалуйста
C++ Операции присвоения матриц на С++ Здравствуйте. Подскажите, пожалуйста, как присвоить одной матрице 4х4 значения другой матрицы. Пытаюсь присвоить одну матрицу другой без цикла: dkiMatrix = dk1Matrix и в цикле: for (i=0; i<size;... подробнее

Показать сообщение отдельно
-=ЮрА=-
Заблокирован
Автор FAQ
10.11.2012, 22:07
lancoma, вот мой взгляд на проблему
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
#include <ctime>
#include <vector>
#include <cstdlib>
#include <iostream>
using namespace std;
 
//ÔóГ*êöèÿ âîçâðГ*Г№Г*ГҐГІ îñòГ*òîê îò Г°Г*Г§Г*îñòè ГЊ ГЁ ñóììû îòåðêçîâ
//Г*Г*ëè÷èå ýòîé ГґГіГ*êöòò ïîçâîëèò ïðîèçâåñòè ââîä Г°Г*Г§Г*ûõ îòðåçêîâ
//ñóììГ* êîòîðûõ Г¤Г*Г±ГІ M
int calcRestLength(int M, vector <int> parts, int restNum);
 
int main()
{
    int i, j;//Ñ÷¸ò÷èêè
    int part;//ÄëèГ*Г*Г* îòäåëüГ*îé Г·Г*Г±ГІГЁ
    int count = 0;//Ñ÷¸ò÷èê ГЇГіГҐГ©
    int length;//äëèГ*Г*Г* ñóììû îòðåçêîâ
    int N = 0;//Áóäåò ñîäåðæГ*ГІГј Гў Г±ГҐГЎГҐ ÷èñëî ГўГ*ðèГ*Г*òîâ êîòîðûìè ìîæГ*Г® äîáðГ*ГІГјГ±Гї äî ГЊ
    srand(time(0));//ГіГ±ГІГ*Г*îâèëè Г*Г*Г· Г§Г*Г*Г·ГҐГ*ГЁГҐ Гў ГЈГҐГ*ГҐГ°Г*òîðå ñëó÷ Г·ГЁГ±ГҐГ«
    //Èìåòèðóåì ââîä ïîëüçîâГ*òåëÿ
    int S = 5; //ìîæГ*Г® áûëî ГЎГ» ðåГ*ëèçîâГ*ГІГј ГЄГ*ГЄ S = 1 + rand()%5
    int M = 30;//30 ïîóñëîâèþ Г*Гі ГЁ áîã Г± Г*ГЁГ¬, õîòÿ ìîæГ*Г® äëèГ*Гі ëèГ*åéêè ГЁ Г°Г*Г*äîìГ*Г® ñäåëГ*ГІГј
    vector <int> parts;//Âåêòîð Г± äëèГ*Г*ìè îòðåçêîâ
    for(i = 0; i < S; i++)
    {
        //Г‡Г*ïîëГ*ГїГҐГ¬ âåêòîð Г·Г*ñòÿìè áîëüøå Г*óëèÿ ГЁ <= M
        part = calcRestLength(M, parts, S - (i + 1));
        cout<<"Length of "<<i + 1<<" part : "<<part<<endl;
        parts.push_back(part);
    }
    //Г’Г*ГЄГ± Г* òåïåðü ïîåõГ*ëè ГЁГ±ГЄГ*ГІГј ñïîñîáû äîñòèæåГ*ГЁГї ГЄГ®Г*Г¶Г* ëèГ*åéêè
    cout<<"Roots searching start..."<<endl;
    for(i = 0; i < S; i++)
    {
        cout<<"Current Root : "<<parts[i];
        length = parts[i];
        for(j = 0; j < S && length < M; j++)
        {
            if(i != j)
            {
                length += parts[j];
                cout<<" - "<<parts[j];
            }
        }
        cout<<"\nM acceded Root lenth : "<<length<<endl;
        if(M != length)
        {
            cout<<"Root length = "<<length<<endl;
            cout<<"M != length - root not acepted"<<endl;
        }
        else
        {
            cout<<"M == length - root acepted"<<endl;
            count++;
        }
    }
    cout<<"Roots searching end"<<endl;
    cout<<"Total number of roots : "<<count<<endl;
    cin.get();//Ñòîï òî÷êГ*
    return 0;
}
 
int calcRestLength(int M, vector <int> parts, int restNum)
{
    int i;
    int length = 0;
    int count  = 0;
    for(i = 0; i < (int)parts.size(); i++)
        length += parts[i];
    for(i = 0; i < restNum; i++)
        count += (i + 1);
    return 1 + rand()%(M - length - count + 1);
}
Проверка здесь http://codepad.org/oLGmJkbQ
Кликните здесь для просмотра всего текста
Length of 1 part : 14
Length of 2 part : 5
Length of 3 part : 1
Length of 4 part : 2
Length of 5 part : 1
Roots searching start...
Current Root : 14 - 5 - 1 - 2 - 1
M acceded Root lenth : 23
Root length = 23
M != length - root not acepted
Current Root : 5 - 14 - 1 - 2 - 1
M acceded Root lenth : 23
Root length = 23
M != length - root not acepted
Current Root : 1 - 14 - 5 - 2 - 1
M acceded Root lenth : 23
Root length = 23
M != length - root not acepted
Current Root : 2 - 14 - 5 - 1 - 1
M acceded Root lenth : 23
Root length = 23
M != length - root not acepted
Current Root : 1 - 14 - 5 - 1 - 2
M acceded Root lenth : 23
Root length = 23
M != length - root not acepted
Roots searching end
Total number of roots : 0

как видим очень сильное влияние на резултат оказывает длинна вводимых отрекзков, нужны какие то оп критери. Поясню - мы можем считать что достигли конца если скажем имея 30 см линейку и отрезки 12 + 10 + 15 получим длинну маршрута 37. Но мне кажется нужно точное совпадение длин, т.е на ввод отрезков должно отражаться правило что хотябы из двух из них можно было бы получить набор сумм равный длине линейки. Я попытался поставить такое ограничение на ввод, но всё же если есть такая возможность хотел бы увидеть доп критерии на длину вводимых отрезков
1
Миниатюры
Задачка - крепкий орешек про линейку  
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru