Member 13322757 Ответов: 2

Как написать код для следующей задачи


Учитывая набор из девяти одиночных (не обязательно различных) цифр, скажем 0, 0, 1, 3, 4, 6, 7, 8, 9, можно сформировать много различных времен в 12-часовом формате времени чч:мм:СС, например 10:36:40 или 01:39: 46, используя каждую из цифр только один раз. Цель состоит в том, чтобы найти максимально возможное допустимое время (с 00:00:01 до 12:00:00), которое может быть сформировано с использованием примерно шести из девяти цифр ровно один раз. В данном случае это 10: 49: 38.




Я попытался сделать это, переведя в секунды, где максимальное время, которое составляет 12: 59: 59, составляет 46799 секунд. Пожалуйста, предложите лучший код.

Что я уже пробовал:

#include < stdio.h>
тап_п()
{
int num[9];
int temp = 0;
int cnt=0;
int A=0, B=0, C=0, D=0, E=0, F=0;
for (int a=0;a< 9; a++)
{ for (int b=0;b< 9; b++)
{ for (int c=0;c< 9; c++)
{ for (int d=0;d< 9; d++)
{ for (int e=0;e< 9; e++)
{ for(int f=0;f< 9; f++)
{ if ((10*num[e]+num[f])< 60)
{ инт кал = (10 * кол-во[А] + Нум[б]) * 3600 + (10 * кол-во[С] и клавишу Num[Д]) * 60 + (10 * кол-во[Е] и клавишу Num[Ф]);
то scanf("%д %д %д %д %д %д %д %д %д",&амп;а&амп;Б&амп;с,&амп;Д&амп;Д,&амп;Ф);
if (cal <= 46799)
{ НКТ++;
если (temp < cal)
{ темп = кал; а = числ[А]; Б = число[б]; с = кол-во[С]; Д = кол-во[Д]; Е = чис[Е]; Ф = пит[Ф];
}
}
}
}
}
}
}
}
}
if (cnt==0) { printf ("невозможно");} else { printf ("%d %d : %d %d : %d %d", A, B, C, D, E, F); } }

2 Ответов

Рейтинг:
2

Patrice T

Цитата:
Я попытался сделать это, переведя в секунды, где максимальное время, которое составляет 12: 59: 59, составляет 46799 секунд. Пожалуйста, предложите лучший код.

Неправильный подход, просто неправильный.

Я бы написал программу, которая будет составлять все возможные комбинации, проверять, какие из них действительны, и сохранять лучший ответ.

Я даю руководство, это ваше домашнее задание, вы пишете код.


Рейтинг:
0

OriginalGriff

Проблема не в секундах: речь идет о проверке каждого возможного порядка набора из девяти цифр и сначала обнаружении допустимых значений времени, а затем самого высокого 12-часового времени. Итак, посмотрите на то, что действительно:

Hour:   01 to 12
Minute: 00 to 59
Second: 00 to 59
И начните организовывать входные значения туда, куда они могут пойти.
Например, самая значимая цифра часа должна быть нулем или единицей - так что найдите значения, которые у вас есть во входных данных, которые подходят. Точно так же для любых значений от 6 до 9 включительно нельзя находиться в самой значимой минутной или второй позиции.
Разберитесь с ними, и тогда вы сможете начать свой путь вниз: самый высокий час, затем самая высокая минута из того, что осталось, затем самая высокая секунда.
Я бы предложил начать с сортировки входных данных и работать оттуда.

Но это твое домашнее задание, а не мое - так что я не дам тебе никакого кода!