Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ задача на С

Автор: Слава 12.09.2006 21:52

Здравствуйте.
Помогите решить задачу на С.
Напечатать в порядке возрастания N чисел вида 2^i* 3^j*5^k. (^ степень, * умножение)
Заранее благодарю

Автор: klem4 12.09.2006 22:04

Условие задачи приведено полностью ? Что то мне подсказывает что нет, ибо решение в таком случае более чем простое ...


Автор: Гость 12.09.2006 22:53

да задача такая - поясни пожалуйста решение

Автор: klem4 12.09.2006 22:59

Прошу прощения, я был не прав, с заданием все в порядке. Хотя ... Ну вот посмотри, такой вариант тебя устроит ?)) Мне кажется врядли ;) Хотя задание выполнено smile.gif


# include <iostream.h>

int main(void)
{
// допустим j = 0; k = 0; -> 3^0 = 1; 5^0 = 1;

for (int i = 0; i < 30; i++) cout << (int)(pow(2, i)) << endl; // 2^i* 3^j* 5^k;
return 0;
}



Другое дело, если бы в уcловие было сказано первые N идущих в порядке возрастания ...

Автор: Michael_Rybak 13.09.2006 1:56

Цитата(klem4 @ 12.09.2006 18:59) *

Другое дело, если бы в уcловие было сказано первые N идущих в порядке возрастания ...


Похоже, именно такой вариант имелся ввиду.


#include <iostream>
#include <set>

using namespace std;

set <int> s;

int main()
{
int n;
cin >> n;

s.insert(1); // 2^0 * 3^0 * 5^0

for (int i = 0; i < n; ++i)
{
int v = *s.begin();
s.erase(s.begin());
s.insert(v * 2);
s.insert(v * 3);
s.insert(v * 5);

cout << v << endl;
}
}


Автор: volvo 13.09.2006 2:08

Michael_Rybak, насколько я вижу задание - речи идет о C, а никак не о С++ ...

"Поспешность нужна только при ловле блох" (С) Козьма Прутков

klem4, тебя это тоже касается...

Автор: klem4 13.09.2006 23:00

Виноват, вот на Си версия, немного громоздкая ...


# include <stdio.h>
# include <conio.h>
# include <stdlib.h>

void GetSequence(int n)
{
int d[] = {2, 3, 5};

int next = 0;
int count = 0;

do
{
int temp = ++next;

int badCount = 0;

while ((temp > 1) && (badCount < 3))
{

while ((temp > 1) && (badCount < 3))
{
badCount = 0;

for (int i = 0; i < 3; i++)
if (temp % d[i] == 0)
{
temp = temp / d[i];
break;
}
else
badCount++;
}
}

if (badCount < 3)
{
printf("%d\n", next);
count++;
}

} while (count < n);
}

int main(void)
{
int n;

printf("n = "); scanf("%d", &n);

GetSequence(n);

return 0;
}