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

Какое минимальное количество спичек нужно для того, чтобы построить в пространстве N кубов со стороной в одну спичку - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Найти номера строк и столбцов всех Седловых точек матрицы http://www.cyberforum.ru/cpp-beginners/thread172897.html
Дана целочисленная прямоугольная матрица. Определить: 1.) сумму элементов в тех строках, которые содержат хотя бы один отрицательный элемент; 2.) номера строк и столбцов всех Седловых точек матрицы. void main() { const int m=4, n=5; int a; int l = 1; int i,j; for (i=0; i < m; i++)
C++ обычная программа int x=0,n=0; cin>>x; while(x!=0){ x=x/10; n++; } cout<<n<<endl; ну думаю тут уже всем ясно что делает прога,считает сколько цифр,если я ввожу 1000 выводит 4-правильно а если я ввожу 456456456465456 то 0,почему http://www.cyberforum.ru/cpp-beginners/thread172895.html
C++ Вывод в виде таблицы значения функции y=f(x)
Написать программу, которая выводит в виде таблицы значения функции y=f(x) на интервале х∈ c шагом dx=1 2*sqr(x) +10,если х=5 или х=10 f(x) = sqrt(4*x) + sqrt(27*x)*27*x -x, если х=1 -1/x, в остальных случаях Необходимо реализовать программу в двух версиях. В одной версии сле-дует применить циклическую конструкцию с условиями, а в другой вер-сии –...
C++ Задано множество пар вершин, построить матрицу инцидентности
матрица инцидентности задано множество пар вершин, построить матрицу инцидентности как вывести матрицу инцидентности?? cout<<"\nvvedite kilkist vershin: "; cin>>n; int kr; //введення cout<<"\n"<<"vvedite pochergovo rebra (po zavershenu vvedite '0'):"<<"\n";
C++ a^3+b^3+c^3=d^3 http://www.cyberforum.ru/cpp-beginners/thread172883.html
Здравствуйте! Задали задачу: написать программу, находящую целые a,b,c,d в промежутке от 1 до 10000, такие, что a^3+b^3+c^3=d^3 Надо, чтобы программа работала быстро (до 1мин). Простые вложенные циклы будут работать очень долго. В интернете нашёл некую реализацию на c++, но во-первых в c++ я слаб (не до конца понимаю смысл переменных M и N), во-вторых прога всё равно работает долго. Вот код:...
C++ Экранная клавиатура Надо сделать так, чтобы нажимая мышкой кнопки на форме(например "4") программа записывала их в запущеный текстовый редактор(блокнот). В интернете ничего вразумительного пока не нашол( Кто знает - подскажите пожалуста. подробнее

Показать сообщение отдельно
Mr.X
Эксперт С++
3049 / 1694 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
07.10.2010, 16:07
Очевидно, что наиболее компактная фигура из квадратов получится, если мы будем присоединять к ней квадраты последовательно по спирали.
Т.е. строим максимально возможный квадрат со стороной s, на что уходит k = 2*s*(s+1) спичек, затем к нему пристраивается ряд длиной s, и еще один длиной (s + 1), пока не дойдем до нужного количества квадратов. На первый квадрат каждого ряда тратится три спички, а на остальные квадраты - две.
Т.е. общее количество спичек равно k, плюс 3, умноженное на номер p дополнительного ряда, в котором мы находимся (1 или 2), и еще по две спички на каждый дополнительный квадрат.
Это описывается формулой, примененной в следующей программе (с вышеприведенными формулами не совпадает):
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
/////////////////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include <cmath>
////////////////////////////////////////////////////////////////////////////////////////
int matches_quantity_for_squares(int  n)
{
    int s = static_cast<int>(floor(sqrt(static_cast<double>(n))));
    int k = n - s * s;
    int p = (k == 0) ? 0 : (k - 1)/s + 1;
    return 2*s*(s+1) + p*3 + (k-p)*2;
}
////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
    for(;;)
    {
        int  squares_count;
        do
        {
            std::cout << "число квадратов > 0 = ";            
            std::cin >> squares_count;        
        }while(squares_count <= 0);
 
        std::cout <<     "количество спичек   = "
                  << matches_quantity_for_squares(squares_count)
                  << std::endl
                  << std::endl
                  << std::endl;    
    }
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru