Здравствуйте, Patriarh, Вы писали:
P>Пожалуйста, напишите прогу!!! P>Найти натуральные числа, не превосх заданного и делящиеся на каждую из свойх цифр, отличных от нуля(прога должна быть ра C)
Уважаемый! Мы можем помочь в отладке программы, в разработке алгоритмической части, в оптимизации... Но только с твоим участием.
Здравствуйте, Кодт, Вы писали:
К>Уважаемый! Мы можем помочь в отладке программы, в разработке алгоритмической части, в оптимизации... Но только с твоим участием.
на крайняк можно было схитрить и в этюды запостить
Пожалуйста, напишите прогу!!!
Найти натуральные числа, не превосх заданного и делящиеся на каждую из свойх цифр, отличных от нуля(прога должна быть ра C)
Здравствуйте, Аноним, Вы писали:
P>>Пожалуйста, напишите прогу!!! P>>Найти натуральные числа, не превосх заданного и делящиеся на каждую из свойх цифр, отличных от нуля(прога должна быть ра C)
А>Вот текст. Проверял под VS.NET 2003. Вроде работает
Работает, но, во-первых, неправильно, а во-вторых, не на Си
Попробуй ввести число 19. И ты утверждаешь, что оно делится на 9?
Здравствуйте, Patriarh, Вы писали:
P>Пожалуйста, напишите прогу!!! P>Найти натуральные числа, не превосх заданного и делящиеся на каждую из свойх цифр, отличных от нуля(прога должна быть ра C)
случилась тут у меня бессоница, решил помочь.
Вот:
#include <stdio.h>
#define FALSE 0
#define TRUE 1
typedef int BOOL;
BOOL check(int value)
{
int val = value;
do
{
unsigned r = (unsigned)(val % 10);
if (r && value % r)
return FALSE;
val /= 10;
} while (val > 0);
return TRUE;
}
int main()
{
int n = 0;
printf("%s", "Enter natural number: ");
scanf("%d", &n);
printf("%s","---------------------------------------\n");
while (n > 0)
{
if (check(n))
printf("%d\n", n);
--n;
}
return 0;
}
Re: Задача
От:
Аноним
Дата:
14.12.04 10:04
Оценка:
Здравствуйте, Patriarh, Вы писали:
P>Пожалуйста, напишите прогу!!! P>Найти натуральные числа, не превосх заданного и делящиеся на каждую из свойх цифр, отличных от нуля(прога должна быть ра C)
Napisati — bez problem, a chito za eto mne budet, ili mne nasharik mozg napryagati ?
Re: Задача
От:
Аноним
Дата:
14.12.04 13:42
Оценка:
Здравствуйте, Patriarh, Вы писали:
P>Пожалуйста, напишите прогу!!! P>Найти натуральные числа, не превосх заданного и делящиеся на каждую из свойх цифр, отличных от нуля(прога должна быть ра C)
Вот текст. Проверял под VS.NET 2003. Вроде работает
Можно еще дополнительные проверки вставить, но ты сам с этим справишься.
#include"stdafx.h"#include <iostream>
#include <fstream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int bigNumber;
int curNumber = 1;
int counter = 0;
cout<<"Enter a number";
cin>>bigNumber;
while (curNumber>0 && bigNumber>0)
{
cout<<"Please enter next number that is not bigger than "<<bigNumber<<endl
<<" and делится на каждую из своих цифр, отличных от нуля";
cin>>curNumber;
cout<<"The next number that is ->"<<curNumber<<endl;
}
cout<<"Thank you for your co-operation!!!"<<endl;
return 0;
}
Здравствуйте, Кодт, Вы писали:
К>Работает, но, во-первых, неправильно, а во-вторых, не на Си К>Попробуй ввести число 19. И ты утверждаешь, что оно делится на 9?
а кто сказал что можно ввести 19? там же русским по серому написано:
Please enter next number that is not bigger than "<<bigNumber<<endl<"and делится на каждую из своих цифр, отличных от нуля
Здравствуйте, korzhik, Вы писали:
K>Здравствуйте, Patriarh, Вы писали:
P>>Пожалуйста, напишите прогу!!! P>>Найти натуральные числа, не превосх заданного и делящиеся на каждую из свойх цифр, отличных от нуля(прога должна быть ра C)
K>случилась тут у меня бессоница, решил помочь.
ИМХО зря
Здравствуйте, migel, Вы писали:
K>>случилась тут у меня бессоница, решил помочь. M>ИМХО зря
не факт.
кто хочет действительно чему то учиться, тот будет решать задачи сам,
а кто учится для бумажки, тот всегда найдёт способ списать.
Ну а то, что я ему помог... мне не жалко, делов то на 10 минут.
Здравствуйте, korzhik, Вы писали:
K>Ну а то, что я ему помог... мне не жалко, делов то на 10 минут.
Брутфорс, конечно, рулит...
Твоё решение имеет сложность O(N*log(N)^2): перебор всех чисел — O(N), разложение по основанию 10 — O(lg(N)) и проверка делимости — O(log(N)).
Можно ли быстрее? Предположим, что нам нужно найти все 100-разрядные числа, делящиеся на свои цифры?
Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, korzhik, Вы писали:
K>>Ну а то, что я ему помог... мне не жалко, делов то на 10 минут.
К>Брутфорс, конечно, рулит...
что такое брутфорс? полный перебор что ли?
К>Твоё решение имеет сложность O(N*log(N)^2): перебор всех чисел — O(N), разложение по основанию 10 — O(lg(N)) и проверка делимости — O(log(N)). К>Можно ли быстрее? Предположим, что нам нужно найти все 100-разрядные числа, делящиеся на свои цифры?
интересно будет подумать над более оптимальном алгоритмом, но это вечером.
Здравствуйте, Patriarh, Вы писали:
P>Пожалуйста, напишите прогу!!! P>Найти натуральные числа, не превосх заданного и делящиеся на каждую из свойх цифр, отличных от нуля(прога должна быть ра C)
Ну, реализацию тебе хрен кто напишет, а вот алгоритм Я тебе
подскажу:
Во-первых объявляешь массив (например: int a[20]), далее пишешь функцию,
которая разбивает данное число на разряды (функция возвращает массив)
далее перебираешь полученные цифры, проверяя при этом условия, что цифра не
превоходит заданного числа, при этом лучше всего завести переменную, типа Bool
Если все условия учтены, то выводить на печать.
Здравствуйте, JenekX, Вы писали:
JX>Во-первых объявляешь массив (например: int a[20]), далее пишешь функцию, JX>которая разбивает данное число на разряды (функция возвращает массив) JX>далее перебираешь полученные цифры, проверяя при этом условия, что цифра не JX>превоходит заданного числа, при этом лучше всего завести переменную, типа Bool JX>Если все условия учтены, то выводить на печать.
JX>Ну вот и все!!!
Ну вот не всё. Что значит "перебираешь полученные цифры"?
Проверка условия — для одного числа эта задача тривиальна, и массив здесь нафиг не нужен.
Для серии чисел — я уже говорил, тупое решение занимает O(log(N)^2) на каждое число.