Přejít na obsah

Recommended Posts

Odesláno

Уважаемые господа...

я тут читаю книжку - пробую и кое-где туплю. Плюс кое-какие задания и пояснения перехватываю от народа. Методом тыка и постепенного осознания. Подскажите элементарные вещи, пожалуйста.

Например, надо вывести

* * * * *

* * * * *

* * * * *

* * * * *

то есть звездочки второго ряда выходят как бы в под пустыми местами первого (шахматная доска)

не понимаю как это нарисовать

у меня пока так только

{

cout << "*\t*\t*\t*\t*\t*\t*\t*\n";

cout << "\t*\t*\t*\t*\t*\t*\t*\t*\n";

}

но это не правильно....

 

и еще я тут считаю НОД одним вариантом

 

int SWAP (int a, int b ){

int c;

c=a;

a=b;

b=c;

 

return 0;

}

 

int NSD (int a, int b ) {

int c;

 

if (a<B) SWAP (a,b );

 

do {

c=a%b;

a=b;

b=c;

} while (c!=0);

 

return a;

}

 

и я знаю что это не идеальный вариант - просто такой рассматривался на примере

А теперь мне надо посчитать для 12 и 8 наибольший общий делитель, но при этом в программе использовать

d=8

d--; // то есть 7

d--; // тут уже 6.... и так далее

я вроде логику улавливаю. но это "вроде" и как написать ни фига не понимаю.

  • Odpovědi 67
  • Created
  • Poslední odpověď

Top Posters In This Topic

Top Posters In This Topic

Odesláno
то есть звездочки второго ряда выходят как бы в под пустыми местами первого (шахматная доска)

не понимаю как это нарисовать

у меня пока так только

{

cout << "*\t*\t*\t*\t*\t*\t*\t*\n";

cout << "\t*\t*\t*\t*\t*\t*\t*\t*\n";

}

но это не правильно....

 

Может их тоже надо циклами выводить, а не прямым текстом? Два вложеных цикла с проверкой на четность.

Odesláno
Может их тоже надо циклами выводить, а не прямым текстом? Два вложеных цикла с проверкой на четность.

 

А разве нельзя в одном? С проверкой на четность? :)

Odesláno
А разве нельзя в одном? С проверкой на четность? :)

Один на строки, другой на звездочки. Циклить, так циклить ;) а вообще хз что там ожидается в качестве правильного ответа. Как показывает практика, составители обучающих книг еще те затейники :)

Odesláno

Вот если по быстрому и не думая, то как то так.

Ну и шахматы же вроде квадратные? :)

     int size = 8; 
     for(int i = 0; i < size*size; ++i){
         if (i % size == 0 && i > 0)
             std::cout << std::endl;
         std::cout << (i / size % 2 ? "-*" : "*-");
     }
     std::cout << std::endl;

Результат:

*-*-*-*-*-*-*-*-
-*-*-*-*-*-*-*-*
*-*-*-*-*-*-*-*-
-*-*-*-*-*-*-*-*
*-*-*-*-*-*-*-*-
-*-*-*-*-*-*-*-*
*-*-*-*-*-*-*-*-
-*-*-*-*-*-*-*-*

Правильно?

Odesláno
Лучше не спасибо говорите, а говорите что все поняли. :)

 

jes - что бы все понять я сейчас часок посижу и разберу строчку за строчкой. Потому что сразу так поняла процентов 50%. Сейчас вот с книжкой буду каждую строчку расшифровывать и допонимать. Я пока так и делаю - каждое задание что там описано делаю и перевожу для себя на "русский язык". Вот сейчас ищу значение &&.

У меня много времени уходит на подобный "перевод". А вот когда смогу "нарисовать" круг из звездочек - тогда скажу "спасибо, поняла"-)

Odesláno

jes, в простой задаче на циклы ты сделал 192 операции деления и одну умножения. Хотя там можно вообще этого не делать. Теперь ясно, почему современные программы тормозят и на 1GHz процессоре :)

 

Ничего личного, просто я в своё время был вынужден обходится процессором, который умел только складывать и вычитать :) Поэтому мне глаза режет.

Odesláno

http://informatics.mccme.ru/moodle/mod/book/view.php?id=547

Логическое И является бинарным оператором (то есть оператором с двумя операндами: левым и правым) и имеет вид && (два знака амперсанда). Оператор && возвращает true тогда и только тогда, когда оба его операнда имеют значение true.
Odesláno
jes, в простой задаче на циклы ты сделал 192 операции деления и одну умножения. Хотя там можно вообще этого не делать. Теперь ясно, почему современные программы тормозят и на 1GHz процессоре :)

 

Ничего личного, просто я в своё время был вынужден обходится процессором, который умел только складывать и вычитать :) Поэтому мне глаза режет.

Вот так и знал, что кто-то подобное напишет. :)

Я и не думал ни об оптимизации, просто написал код, прочитав выше про 1 цикл. Кстати, если об оптимизации, stl тебе глаза не режет? :)

Odesláno
Кстати, если об оптимизации, stl тебе глаза не режет? :)

 

stl? А где это в коде, и что это? ;)

Odesláno

:D

Лирика конечно, я в оптимизации не спец, но что-то мне подсказывает, что если делать с вложенным циклом, я сомневаюсь что будет быстрее, N инициализаций вложенного цикла с условием тоже стоит тактов.

 

В общем, ты меня уязвил. :)

С вложенным циклом, на размер 1000x1000:

real    0m0.249s
user    0m0.043s
sys     0m0.020s

С множественным делением, на размер 1000x1000:

real    0m0.227s
user    0m0.047s
sys     0m0.020s

Odesláno

С вложенным циклом как чётность определял? Кстати, попробуй посчитать без операция вывода, мне кажется основные потери там.

Odesláno

i & 1

и

i % 2

И в том и том варианте.

 

Ок, без вывода,

Циклы и использование i & 1:

real    0m0.031s
user    0m0.030s
sys     0m0.000s

Деления и использование i % 2

real    0m0.032s
user    0m0.027s
sys     0m0.003s

То есть разница несущественна... вообще.

Pokud chcete odpovídat, musíte se přihlásit nebo si vytvořit účet.

Pouze registrovaní uživatelé mohou odpovídat

Vytvořit účet

Vytvořte si nový účet. Je to snadné!

Vytvořit nový účet

Přihlásit se

Máte již účet? Zde se přihlašte.

Přihlásit se



  • Kdo si právě prohlíží tuto stránku

    • Žádný registrovaný uživatel si neprohlíží tuto stránku
×
×
  • Vytvořit...