Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.01.2021, 23:31   #1
Farlep
Пользователь
 
Регистрация: 01.01.2021
Сообщений: 30
По умолчанию Помогите с циклом for (оптимизация кода)

Добрый день.

Гуру, подскажите пожалуйста, ведь можно как то оптимизировать код, что бы не расписывать каждый треугольник елки отдельными формулами?

Целый день голову ломал, пока не решил написал этот костыль (

На скрине итог верный, но код, как по мне ужасный.

И если можно, подскажите, как разместить "#" вместо верхней "*" и вместо крайних нижних.

Заранее спасибо.

Код:
#include <iostream>

using namespace std;

int main() {


	int n;
	cin >> n;
	
		for (int i = 0; i < n; i++)
		{
			
			for (int j = 0; j < n + 3 - i; j++)
			{
				cout << " ";								
			}					

			for (int j = 0; j < 2 * i + 1; j++)
			{
			    cout << "*";							
			}
			cout << endl;
		}

		for (int i = 0; i < n + 1; i++)
		{
			for (int j = 0; j < n + 2 - i; j++)
			{
				cout << " ";
			}
			for (int j = 0; j < 2 * i + 3; j++)
			{
				cout << "*";
			}
			cout << endl;
		}

		for (int i = 0; i < n + 2; i++)
		{
			for (int j = 0; j < n + 1 - i; j++)
			{
				cout << " ";
			}
			for (int j = 0; j < 2 * i + 5; j++)
			{
				cout << "*";
			}
			cout << endl;
		}
	


	system("pause");
	
}
Изображения
Тип файла: png elka.png (10.8 Кб, 2 просмотров)
Тип файла: png elka_whis_toys.png (13.1 Кб, 19 просмотров)
Farlep вне форума Ответить с цитированием
Старый 02.01.2021, 13:52   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,544
По умолчанию

Разве что вынести рисование одного треугольника в отдельную функцию:
Код:
#import <iostream>

using namespace std;

void tree(int start, int height, int left){
	for(int i=1; i<=height; i++){
		for(int j=0; j<left-start/2-1;j++) cout<<" ";
		for(int j=1; j<=start; j++) cout<<(i==height && (j==start || j==1) ? "#" : "*");
		cout<<endl;
		start+=2;
	}
}

main(){
	int n;
	cin>>n;
	tree(1,1,n+4);
	tree(3,n-1,n+4);
	tree(3,n+1,n+4);
	tree(5,n+2,n+4);
	system("pause");
}
Arigato вне форума Ответить с цитированием
Старый 02.01.2021, 15:29   #3
Farlep
Пользователь
 
Регистрация: 01.01.2021
Сообщений: 30
По умолчанию

Спасибо, но мы проходим сейчас циклы. И нужно сделать задачу через for

На форуме есть похожее решение

https://programmersforum.ru/showthread.php?t=224149

Игрушки по краям есть, нет только звезды. И формула строит одинаковые 3 треугольника, а у меня в задаче 3 разных треугольника.
Farlep вне форума Ответить с цитированием
Старый 02.01.2021, 17:09   #4
Farlep
Пользователь
 
Регистрация: 01.01.2021
Сообщений: 30
По умолчанию

Через очередные костыли написал.

Сдача кода 23.01 )

Может к тому времени придумаю более оптимизированный код, используя только циклы

Код:
//Elka

#include <iostream>

using namespace std;

int main() {

	// Что бы вывести на экран елку согласно заданию обязательное условие n=3

	int n=3;
	//cin >> n;

	for (int i = 0; i < n - 2; i++)
	{

		for (int j = 0; j < n + 3 - i; j++)
		{
			cout << " ";
		}

		for (int j = 0; j < 2 * i + 1; j++)
		{
			cout << "#";
		}
		cout << endl;
	}
	
		for (int i = 0; i < n-2; i++)
		{
			
			for (int j = 0; j < n + 2 - i; j++)
			{
				cout << " ";					
			}					


			for (int j = 0; j < 2 * i + 3 ; j++)
			{				
			    cout << "*";							
			}
			cout << endl;
		}

				for (int i = 0; i < n - 2; i++)
		{
			for (int j = 0; j < n + 1 ; j++)
			{
				cout << " ";
			}
			for (int j = 0; j < 2 * i + 4; j++)
			{
				if (j < 1)
				{
					cout << "#";
				}

				if (j == 3)
				{
					cout << "#";
				}
				else cout << "*";

			}

			cout << endl;
		}

		for (int i = 0; i < n; i++)
		{
			for (int j = 0; j < n + 2 - i; j++)
			{
				cout << " ";
			}
			for (int j = 0; j < 2 * i + 3; j++)
			{
				cout << "*";
			
			}
			cout << endl;
		}

		for (int i = 0; i < n - 2; i++)
		{
			for (int j = 0; j < n - 1 ; j++)
			{
				cout << " ";
			}
			for (int j = 0; j < 2 * i + 8; j++)
			{
				if (j < 1)
				{
					cout << "#";
				}

				if (j == 7)
				{
					cout << "#";
				}
				else cout << "*";

			}

			cout << endl;
		}


		for (int i = 0; i < n + 1; i++)
		{
			for (int j = 0; j < n + 1 - i; j++)
			{
				cout << " ";
			}
			for (int j = 0; j < 2 * i + 5; j++)
			{
				cout << "*";
				
			}
			
			cout << endl;
		}
		for (int i = 0; i < n - 2; i++)
		{
			for (int j = 0; j < n - 3; j++)
			{
				cout << " ";
			}
			for (int j = 0; j < 2 * i + 12; j++)
			{
				if (j < 1)
				{
					cout << "#";
				} 
				
				if (j == 11)
				{
					cout << "#";
				}
				else cout << "*";

			}

			cout << endl;
		}

	system("pause");
	
}
Farlep вне форума Ответить с цитированием
Старый 02.01.2021, 18:28   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Цитата:
Сообщение от Farlep Посмотреть сообщение
но мы проходим сейчас циклы. И нужно сделать задачу через for
Решение Arigato более компактное. Да и циклы for там присутствуют. Вот переделанный вариант из старой темы:
Код:
#include <iostream>
using namespace std;

int main(void)
{
    int K;
    cin >> K;
    for (int i = 1; i <= K; ++i) {
        int p = 2 * i;
        for (int j = i - 1; j <= p; ++j) {
            int h = j == p;
            for (int z = 0; z < 2 * K - j; ++z) {
                cout << " ";
            }
            if (h) {
                cout << "#";
            }
            if (j == 0) {
                cout << "#";
            } else {
                for (int z = 0; z <= 2 * (j - h); ++z) {
                    cout << "*";
                }
            }
            if (h) {
                cout << "#";
            }
            cout << "\n";
        }
    }
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
оптимизация кода Programmer121 Общие вопросы C/C++ 7 12.01.2016 17:37
Оптимизация кода HDMI PHP 16 22.10.2012 13:06
Оптимизация кода Shouldercannon Общие вопросы Delphi 23 22.07.2010 22:45
Оптимизация кода в си dampirik Помощь студентам 4 07.07.2009 11:30
Оптимизация кода [Smarik] Gamedev - cоздание игр: Unity, OpenGL, DirectX 9 20.08.2008 15:00