Суть задания
Напиши функцию которая выведет
111
11
1
2
22
222
333
33
3
Использовать цикл
МОЙ код
#include
#include
using namespace std;
void main()
{
setlocale(LC_ALL, "RUS");
for (int i = 0;i < 3;i++) {
for (int j = 0;j < 3;j++) {
if (i <= j) {cout << "1";}
}
cout << "\n";
}
for (int i = 0;i < 3;i++) {
for (int j = 0;j < 3;j++) {
if (i >= j) { cout << "2"; }
}
cout << "\n";
}
for (int i = 0;i < 3;i++) {
for (int j = 0;j < 3;j++) {
if (i <= j) { cout << "3"; }
}
cout << "\n";
}
system("pause");
}
Другие языки программирования и технологии
Нужно упростить цикл C++
Очевидно, что хочется внести все еще в один цикл. Для начала заменяем строки на числа:
k = 1;
for (int i = 0;i < 3;i++) {
for (int j = 0;j < 3;j++) {
if (i <= j) {cout << k;}
}
cout << "\n";
}
k=2;// и т. д.
Теперь видно, что можно сделать цикл по k - все 3 выражения идентичны, за исключением проверки (i<=j), которая при четных k одна, при нечетных - другая. Делаем "в лоб":
for (int k=1;k<=3;k++){
for (int i = 0;i < 3;i++) {
for (int j = 0;j < 3;j++) {
if( ((k%2==1) && (i <= j)) || ((k%2==0) && (i >= j) )) {cout << k;}
}
cout << "\n";
}
}
Работает, но условие сложное. Заметим, что выражение в if имеет вид почти (A&&B)||(!A&&!B) - это формула эквивалентности (логического равенства). Итак
for (int k=1;k<=3;k++){
for (int i = 0;i < 3;i++) {
for (int j = 0;j < 3;j++) {
if ( (i==j)||(k%2==1) == (i < j) ) {cout << k;}
}
cout << "\n";
}
}
http://ideone.com/V3Es6d
При желании, можно еще упростить, поигравшись приростом и пределами циклов (нечетные - от 3 к 1, четные - от 1 к 3).
k = 1;
for (int i = 0;i < 3;i++) {
for (int j = 0;j < 3;j++) {
if (i <= j) {cout << k;}
}
cout << "\n";
}
k=2;// и т. д.
Теперь видно, что можно сделать цикл по k - все 3 выражения идентичны, за исключением проверки (i<=j), которая при четных k одна, при нечетных - другая. Делаем "в лоб":
for (int k=1;k<=3;k++){
for (int i = 0;i < 3;i++) {
for (int j = 0;j < 3;j++) {
if( ((k%2==1) && (i <= j)) || ((k%2==0) && (i >= j) )) {cout << k;}
}
cout << "\n";
}
}
Работает, но условие сложное. Заметим, что выражение в if имеет вид почти (A&&B)||(!A&&!B) - это формула эквивалентности (логического равенства). Итак
for (int k=1;k<=3;k++){
for (int i = 0;i < 3;i++) {
for (int j = 0;j < 3;j++) {
if ( (i==j)||(k%2==1) == (i < j) ) {cout << k;}
}
cout << "\n";
}
}
http://ideone.com/V3Es6d
При желании, можно еще упростить, поигравшись приростом и пределами циклов (нечетные - от 3 к 1, четные - от 1 к 3).
через процедуру или два цикла
Степан Савченко
А не подскажете как написать через 2 цикла ?
Похожие вопросы
- Срочно нужно помощь с C#.
- помогите решить задачи оператор switch решение нужно visual studio (C)
- Сколько времени нужно чтоб выучить C++ и Python? :-)
- Объясните тему Циклы, а пальцах? C++
- Вопрос по трассировке цикла со вложенностью. C++
- Помогите решить тут нужно умение строить цикл, чего я еще не умею. . Программирование на C#
- Алгоритм цикла с неизвестным числом повторений. C++.
- Учу C++! Уже знаю: типы данных, циклы. условия, привидения и т. д учу 5дней. вот программа! Как норм за 5 дней?
- Не могу опредилиться между C++ и C#, с чего начать программировать. Вот знаю например что в C++ нужно самим управлять...
- Помогите пожалуйста разобраться с циклом while c++
то чего мне сильно не хватало