Форум программистов, компьютерный форум 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++ Задано множество пар вершин, построить матрицу инцидентности
матрица инцидентности задано множество пар вершин, построить матрицу инцидентности как вывести матрицу инцидентности?? cout<<"\nvvedite kilkist vershin: "; cin>>n; int kr; //введення cout<<"\n"<<"vvedite pochergovo rebra (po zavershenu vvedite '0'):"<<"\n";
a^3+b^3+c^3=d^3 C++
Здравствуйте! Задали задачу: написать программу, находящую целые a,b,c,d в промежутке от 1 до 10000, такие, что a^3+b^3+c^3=d^3 Надо, чтобы программа работала быстро (до 1мин). Простые вложенные циклы будут работать очень долго. В интернете нашёл некую реализацию на c++, но во-первых в c++ я слаб (не до конца понимаю смысл переменных M и N), во-вторых прога всё равно работает долго. Вот код:...
C++ Экранная клавиатура http://www.cyberforum.ru/cpp-beginners/thread172876.html
Надо сделать так, чтобы нажимая мышкой кнопки на форме(например "4") программа записывала их в запущеный текстовый редактор(блокнот). В интернете ничего вразумительного пока не нашол( Кто знает - подскажите пожалуста.
C++ Из двух заданных строк определить ту, которая содержит максимальную долю пробелов в ней Всем здравствуйте! прошу помощи в лаборатоной работе: Даны две строки. Определить номер строки (первая или вторая), которая содержит максимальную долю пробелов в ней. Для строк с равными долями пробелов должно быть выведено соответствующее сообщение. Зарание спасибо. И не могли бы посоветовать какие-нить самоучители по с++ ? подробнее

Показать сообщение отдельно
Mr.X
Эксперт С++
 Аватар для Mr.X
2807 / 1583 / 248
Регистрация: 03.05.2010
Сообщений: 3,693
07.10.2010, 16:07     Какое минимальное количество спичек нужно для того, чтобы построить в пространстве N кубов со стороной в одну спичку
Очевидно, что наиболее компактная фигура из квадратов получится, если мы будем присоединять к ней квадраты последовательно по спирали.
Т.е. строим максимально возможный квадрат со стороной 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;    
    }
}
 
Текущее время: 01:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru