Вопрос задан 22.07.2023 в 15:22. Предмет Информатика. Спрашивает Иванов Кирилл.

Число делителей Имя входного файла: Имя выходного файла: Ограничение по времени: Ограничение по

памяти: 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; } что тут неправильно?
0 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

0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

В коде, который вы предоставили, есть несколько ошибок:

  1. Ошибка ввода данных: В строке scanf вы используете неправильные модификаторы формата. Вместо &amp; следует использовать просто &, чтобы правильно считывать значения.

  2. Неправильные условия в циклах: В циклах do...while и while у вас неправильно сформулированы условия. Вам нужно использовать <= вместо do{...} while(i<n) и do{...} while(k<=n).

  3. Неправильное условие во внутреннем цикле: У вас есть цикл while(i%k==0);, который внутри do...while цикла, но у него нет тела. Вероятно, вы хотели выполнить инкремент внутри цикла, но у вас стоит точка с запятой после условия, что приводит к бесконечному циклу.

  4. Логическая ошибка: Вы сравниваете 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 с наибольшим числом делителей и выводить его и количество делителей.

0 0

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос