Ваша функция valuta()
имеет недостатки в том, что ей необходимо вернуть максимальное квалифицирующее значение, но она не знает о предыдущем максимуме - temp
всегда равно нулю. Следующий аргумент принимает предыдущий максимум в качестве аргумента:
int valuta(int val, int h, int previous )
{
return ( mcd(val, h) == 1 && h > previous ) ? h : previous ;
}
И вызывается из main()
таким образом:
t = valuta( val, x, t ) ;
Проверка mcd(val, h) == 1
некорректна, поскольку mcd()
всегда возвращает только значение параметра b
, которое не было изменено в рекурсии, поэтому никогда не вернет 1, если аргумент b
не равен 1. Так как I Понятия не имею, для чего предназначен mcd()
, я не могу сказать, как это исправить. Похоже, что это неправильная реализация алгоритма наибольшего общего делителя Евклида, который будет правильно реализован:
int mcd(int a, int b)
{
if(b == 0)
return a;
else
return mcd(b, a % b);
}
Но я не могу понять, как это относится к:
"[...] он наибольшее целое число с 3 [...]
Обработка нечетных / четных / нечетных последовательностей может быть существенно упрощена до такой степени, что она короче и проще, чем ваш метод (как требуется), - и так, чтобы она работала!
Следующее является более ясной отправной точкой, но может не быть решением, так как неясно, что он должен делать.
#include <stdio.h>
#include <stdbool.h>
int mcd(int a, int b)
{
if(b == 0)
return a;
else
return mcd(b, a % b);
}
int valuta(int val, int h, int previous )
{
return ( mcd(val, h) && h > previous ) ? h : previous ;
}
int main()
{
int val, x, t ;
printf( "Enter value:") ;
scanf("%d", &val);
typedef enum
{
EVEN = 0,
ODD = 1,
UNDEFINED
} eOddEven ;
eOddEven expect = UNDEFINED ;
bool sequence_valid = true ;
printf( "Enter sequence in odd/even or even/odd order (break sequence to exit):\n") ;
while( sequence_valid )
{
scanf("%d", &x);
if( expect == UNDEFINED )
{
// Sequence order determined by first value
expect = (x & 1) == 0 ? EVEN : ODD ;
}
else
{
// Switch expected odd/even
expect = (expect == ODD) ? EVEN : ODD ;
// Is new value in the expected sequence?
sequence_valid = (expect == ((x & 1) == 0 ? EVEN : ODD)) ;
}
// If the sequence is valid...
if( sequence_valid )
{
// Test if input is largest qualifying value
t = valuta( val, x, t ) ;
}
}
// Result
printf("Result: %d\n", t);
return 0;
}