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

Получить все представления числа суммой квадратов целых положительных чисел - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Структуры, Графика, Консоль, MSVS2010 - убрать лишнее http://www.cyberforum.ru/cpp-beginners/thread620991.html
Помогите, что здесь не так? Пытаюсь адаптировать код борланда для MSVS 2010 ... ещё будет здорово , если кто-нибудь подскажет альтернативу window(); textbackground(); textbackground();textcolor(); .. #include <stdlib.h> #include <conio.h> #include <stdio.h> #include <string.h>
C++ Не могу определить почему не так кодировка И так сразу к сути,путаюсь вывести текст в фаил русскими буквами а там ироглифы код : struct a { char name; a() { memset(name,'\0',120); } void add(char *p) http://www.cyberforum.ru/cpp-beginners/thread620985.html
C++ Тип множество
Кто знает в делфи есть тип множество например set of char= , а в с++ есть аналог? или приходится довольствоваться массивами.
С помощью рекурсивной функции вычислить значение выражения C++
С помощью рекурсивной функции вычислить x^n по формуле: x^n=1 при n=1, x^n=1/x^|n| при n<0, x^n=x*x^(n-1) при n>0. все три уравнения составляют систему. помогите с задачкой
C++ Cout - вывод не более 10 чисел в одной строке http://www.cyberforum.ru/cpp-beginners/thread620942.html
Всем здравствуйте! Занимаюсь по книге Липпмана и др " С++ Вводный курс". В одном из материалов есть задание:Напишите программу, которая запрашивает у пользователя 2 числа и выводит числа в диапазоне введеных. Сам код программы: #include "stdafx.h" #include "windows.h" #include "iostream" int _tmain(int argc, _TCHAR* argv) { int a,b; std::cin >>a >>b;
C++ Массивы. Ошибка в программе Подскажите, пожалуйста, в чем ошибка программы. Дело в том, что она должна выводить три разных слова по порядку как они указаны в файле, а указывает только последнее слово: #include <fstream> #include <iostream> using namespace std; void main() { const int number = 3; char *mass , word ; подробнее

Показать сообщение отдельно
ramybozy
8 / 8 / 0
Регистрация: 01.07.2012
Сообщений: 138
10.07.2012, 22:20     Получить все представления числа суммой квадратов целых положительных чисел
Вот мой вариант

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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#include "stdafx.h"
 
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <string>
#include <cctype>
#include <cmath>
#include <vector>
#include <set>
#include <algorithm>
#include <locale>
 
#include <iterator>
 
using namespace std;
 
 
set<multiset<int, less<int>>, less<multiset<int, less<int>>>> result;
 
 
int getInput();
void Task(vector<int> const &, multiset<int, less<int>> const &, int);
void printmSet(multiset<int, less<int>> const &);
 
int _tmain(int argc, _TCHAR* argv[])
{
    locale::global(locale("Russian_Russia.1251"));
    cin.imbue(locale("Russian_Russia.866"));
    cout.imbue(locale("Russian_Russia.1251"));
 
 
    int const N(getInput());
    multiset<int, less<int>> initialMset;
    vector<int> initialVector;
 
    vector<int>::size_type max_size = static_cast<vector<int>::size_type>(floor(sqrt(static_cast<double>(N))));
    for (vector<int>::size_type i = 1; i <= max_size; ++i)
        initialVector.push_back(i * i);
 
    Task(initialVector, initialMset, N);
 
    cout << endl << endl;
    cout << "Список всех разложений" << endl;
    cout << "(с точностью до порядка слагаемых)" << endl;
    cout << "на квадраты данного числа" << endl << endl;
    set<multiset<int, less<int>>, less<multiset<int, less<int>>>>::const_iterator iter;
    for (iter = result.begin(); iter != result.end(); iter++)
        printmSet(*iter);
 
 
 
 
    return 0;
}
 
int getInput()
{
    int n;
    string s;
 
    cout << "Введите целое положительное число, состоящее не более чем из 9 цифр: ";
    getline(cin, s);
    while (true)
    {
        if (s.length() == 0)
        {
            cout << "Число не введено, попробуйте еще раз...";
            getline(cin, s);
            continue;
        }
        else if (s.length() > 9)
        {
            cout << "Слишком длинное, попробуйте еще раз...";
            getline(cin, s);
            continue;
        }
        else
        {
            bool badInput = false;
            for (int i = 0; i < s.length(); ++i)
                if (!isdigit(s[i]))
                {
                    badInput = true;
                    break;
                }
            if (badInput == true)
            {
                cout << "Ошибочный ввод, попробуйте еще раз...";
                getline(cin, s);
                continue;
            }
        }
        n = atoi(s.c_str());
        if (n == 0)
        {
            cout << "Неинтересно, тривильный случай, попробуйте еще раз... ";
            getline(cin, s);
            continue;
        }
        else
            break;
    }
    return n;
}
 
void Task(vector<int> const & curvect, multiset<int, less<int>> const & curmset, int tailnum)
{
    vector<int> workvect(curvect);
    multiset<int, less<int>> workmset(curmset);
 
    switch (tailnum)
    {
        case 0:
            result.insert(workmset);
            return;
        case 1:
            workmset.insert(1);
            result.insert(workmset);
            return;
        case 2:
            workmset.insert(1);
            workmset.insert(1);
            result.insert(workmset);
            return;
        case 3:
            workmset.insert(1);
            workmset.insert(1);
            workmset.insert(1);
            result.insert(workmset);
            return;
        default:
            for (vector<int>::const_reverse_iterator riter = workvect.rbegin(); riter != workvect.rend(); ++riter)
            {
                int newtail = tailnum - *riter;
                int max_size = static_cast<vector<int>::size_type>(floor(sqrt(static_cast<double>(newtail))));
                vector<int> newvect;
                for (vector<int>::size_type i = 1; i <= max_size; ++i)
                    newvect.push_back(i * i);
                multiset<int, less<int>>::iterator iter = workmset.insert(*riter);
                Task(newvect, workmset, newtail);
                workmset.erase(iter);
            }
    }
}
 
void printmSet(multiset<int, less<int>> const & mset)
{
    static int i(1);
    ostream_iterator<int> output (cout, " + ");
    cout << setw(5) << i++ << "." << '\t';
    copy(mset.begin(), mset.end(), output);
    cout << '\b'  << '\b' << " " << endl;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru