
Число делителей Имя входного файла: Имя выходного файла: Ограничение по времени: Ограничение по
памяти: standard input standard output 2 секунды 256 мегабайт Задано число n. Требуется найти число от 1 до n, включительно, которое имеет максимальное число положительных целых делителей. Например, если n = 20, то искомое число — 12, у него 6 делителей: 1, 2, 3, 4, 6, 12. Формат входных данных На вход подается одно число n (1 ≤ n ≤ 105 ) Формат выходных данных Выведите на первой строке число от 1 до n, включительно, которое имеет максимальное число делителей. На второй строке выведите число его делителей. Если есть несколько чисел от 1 до n с максимальным числом делителей, выведите любое из них. Примеры standard input standard output 20 12 6 #include #include int main() { int n, i, a, max=n, p, k; scanf ("%d %d %d %d %d %d", &n, &i, &a, &max, &p, &k); do{i=1; i++; } while(i do{k=1; k++; } while(k do{ while(i%k==0); a++; } while(max printf("%d", p); return 0; } что тут неправильно?

Ответы на вопрос

#include <stdio.h>
int main()
{
int n, k, a, max=0;
scanf ("%d", &n);
for (int i=1; i<=n; i++){
k=2;
for (int j=2; j<=i/2; j++)
if (i % j == 0) k++;
if (k>max) {
a=i; max=k;
}
}
printf("%d\n%d", a, max);
return 0;
}
Пример:
20
12
6



В коде, который вы предоставили, есть несколько ошибок:
Ошибка ввода данных: В строке
scanf
вы используете неправильные модификаторы формата. Вместо&
следует использовать просто&
, чтобы правильно считывать значения.Неправильные условия в циклах: В циклах
do...while
иwhile
у вас неправильно сформулированы условия. Вам нужно использовать<=
вместоdo{...} while(i<n)
иdo{...} while(k<=n)
.Неправильное условие во внутреннем цикле: У вас есть цикл
while(i%k==0);
, который внутриdo...while
цикла, но у него нет тела. Вероятно, вы хотели выполнить инкремент внутри цикла, но у вас стоит точка с запятой после условия, что приводит к бесконечному циклу.Логическая ошибка: Вы сравниваете
max
сn
в цикле, но на этом этапеmax
уже равно значениюn
, так как вы использовалиscanf
перед циклом. Вам нужно сравнитьi
сn
, чтобы найти число с наибольшим количеством делителей.
Поправим код и устраним эти ошибки:
c#include <stdio.h>
int main() {
int n, i, a, max = 0, p = 0, k;
scanf("%d", &n);
for (i = 1; i <= n; i++) {
a = 0;
for (k = 1; k <= i; k++) {
if (i % k == 0) {
a++;
}
}
if (a > max) {
max = a;
p = i;
}
}
printf("%d\n%d\n", p, max);
return 0;
}
Теперь код должен правильно находить число от 1 до n с наибольшим числом делителей и выводить его и количество делителей.


Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili