Постановка проблемы: Арун и его сестра Уша бросают вызов друг другу с помощью математических головоломок. Уша, умнее, пришла в голову идея дать Аруну 12 цифр в диапазоне от 0 до 9 и назначить ему самое позднее время в 2018 с ними. Арун немного нервничает и просит вас помочь ему с компьютерной программой.
Уша даст Аруну 12 цифр. Ему нужно создать дату-время в формате ММ / ДД (должны присутствовать все четыре цифры), а время в формате ЧЧ: ММ ((должны присутствовать все четыре цифры). Дата может быть от 01 // 01 до 12/31 и время может быть с 00:00 до 23:59 (в 24-часовом формате). Указанные цифры могут использоваться только один раз в ответе, который дает Арун. Если возможно более одной комбинации даты и времени, Арун нуждается в дать самую последнюю возможную дату-время в 2018 году.
Ввод
Строка, состоящая из 12 (не обязательно различающихся) отдельных цифр (0-9), разделенных пробелами. Последовательность будет быть неубывающим.
Вывод
Вывести самую последнюю возможную дату-время в 2018. Вывод должен быть в формате ММ / ДД ЧЧ: ММ. Мой код:
#include<stdio.h>
int max(int n1,int n2)
{ if (n1>=n2)
return n1;
else
return n2;
}
int main()
{ int numbers[12];
for (int i=0 ; i<12 ; ++i)
{scanf("%d ",&numbers[i]);}
int month_1=-1,month_2=-1,day_1=-1,hour_1=-1,hour_2=-1,min_1=-1,min_2=-1;
int day_2=-1;
for (int i=0 ; i<12 ; ++i)
{
if(numbers[i]==1)
{
month_1=1;
numbers[i] =20;
}
else if(numbers[i]==0){
month_1=0;
numbers[i] =20;
}
}
if (month_1==0)
{ for (int i=0 ; i<12 ; ++i)
{ if (numbers[i]>0 && numbers[i]<10)
{
month_2 = max(month_2,numbers[i]);
}
}
}
for (int i=0 ; i<12 ; ++i)
{
if (month_2==numbers[i])
{
numbers[i] =20;
break;
}
}
if (month_1 == 1)
{
for (int i=0 ; i<12 ; ++i)
{ if (numbers[i]>=0 && numbers[i]<3)
{
month_2 = max(month_2,numbers[i]);
}
}
}
for (int i=0 ; i<12 ; ++i)
{
if (month_2==numbers[i])
{
numbers[i] =20;
break;
}
}
for (int i=0 ; i<12 ; ++i)
{
if (numbers[i]>=0 && numbers[i]<4)
{
day_1 =max(day_1,numbers[i]);
}
}
for (int i=0 ; i<12 ; ++i)
{
if (day_1==numbers[i])
{
numbers[i] =20;
break;
}
}
if (day_1==0)
{ for (int i=0 ; i<12 ; ++i)
{
if (numbers[i]>0 && numbers[i]<10)
{
day_2 = max(day_2,numbers[i]);
}
}
}
else if (day_1>0 && day_1 <=2)
{ for (int i=0 ; i<12 ; ++i)
{
if (numbers[i]>=0 && numbers[i]<10)
{
day_2 = max(day_2,numbers[i]);
}
}
}
else if (day_1==3)
{ for (int i=0 ; i<12 ; ++i)
{ if (numbers[i]==0 || numbers[i]==1)
{
day_2 = max(day_2,numbers[i]);
}
}
}
for (int i=0 ; i<12 ; ++i)
{
if (day_2==numbers[i])
{
numbers[i] =20;
break;
}
}
for (int i=0 ; i<12 ; ++i)
{ if (numbers[i]>=0 && numbers[i]<3)
{
hour_1 = max(hour_1,numbers[i]);
}
}
for (int i=0 ; i<12 ; ++i)
{
if (hour_1==numbers[i])
{
numbers[i] =20;
break;
}
}
for (int i=0 ; i<12 ; ++i)
{ if (numbers[i]>=0 && numbers[i]<4)
{
hour_2 = max(hour_2,numbers[i]);
}
}
for (int i=0 ; i<12 ; ++i)
{
if (hour_2==numbers[i])
{
numbers[i] =20;
break;
}
}
for (int i=0 ; i<12 ; ++i)
{ if (numbers[i]>=0 && numbers[i]<6)
{
min_1 = max(min_1,numbers[i]);
}
}
for (int i=0 ; i<12 ; ++i)
{
if (min_1==numbers[i])
{
numbers[i] =20;
break;
}
}
for (int i=0 ; i<12 ; ++i)
{ if (numbers[i]>=0 && numbers[i]<10)
{
min_2 = max(min_2,numbers[i]);
}
}
printf("%d%d/%d%d %d%d:%d%d",month_1,month_2,day_1,day_2,hour_1,hour_2,min_1,min_2);
return 0;
}
Ввод
0 0 1 2 2 2 3 5 9 9 9 9
Ожидаемый вывод
12/30 22:59
Я не получаю ожидаемого вывода.
Мой текущий выходной сигнал
12/3-1 22:59
Может кто-нибудь сказать мне, что не так с моим кодом или какие изменения мне нужно сделать, чтобы я получить требуемый вывод.