#include <stdio.h> // <stdio.h> contains a definition for `size_t`
// trying to find the minimum odd number in an array with just even numbers (or no numbers) is UB
int oddmin( int * array, size_t length) {
size_t index = 0 ;
while ( array[ index] % 2 == 0 ) index++; /* skip even numbers */ ;
int minodd = array[ index++ ] ; // first odd number
while ( index < length) {
if ( array[ index] % 2 ) {
if ( array[ index] < minodd) minodd = array[ index] ;
}
index++;
}
return minodd;
}
int main( void ) {
int a[ ] = { 1 , 2 , 3 , - 4 , - 5 , - 6 , 7 , 8 , 9 } ;
printf ( "odd minimum of array a is %d.\n " , oddmin
( a
, 9 ) ) ; int b[ ] = { 1001 } ;
printf ( "odd minimum of array b is %d.\n " , oddmin
( b
, 1 ) ) ; int c[ ] = { 2 , 2 , 2 , 2 , 2 , 2 , 2 , - 3 , 2 , 2 , 2 , 2 , 2 , 2 } ;
printf ( "odd minimum of array c is %d.\n " , oddmin
( c
, sizeof c
/ sizeof * c
) ) ; int d[ ] = { 2 , 2 , 2 , 2 , 2 , 2 , 2 , - 3 , 2 , 2 , 2 , - 5 , 2 , 2 } ;
printf ( "odd minimum of array d is %d.\n " , oddmin
( d
, sizeof d
/ sizeof * d
) ) ; int e[ ] = { 2 , 2 , 2 , 2 , 2 , 2 , 2 , - 5 , 2 , 2 , 2 , - 3 , 2 , 2 } ;
printf ( "odd minimum of array e is %d.\n " , oddmin
( e
, sizeof e
/ sizeof * e
) ) ; int f[ ] = { 42 , 42 , 42 , 42 } ;
printf ( "odd minimum of array f is **UB** (%d).\n " , oddmin
( f
, sizeof f
/ sizeof * f
) ) ; int g[ ] = { 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 } ;
printf ( "odd minimum of array g is %d.\n " , oddmin
( g
, sizeof g
/ sizeof * g
) ) ; }
I2luY2x1ZGUgPHN0ZGlvLmg+IC8vIDxzdGRpby5oPiBjb250YWlucyBhIGRlZmluaXRpb24gZm9yIGBzaXplX3RgCgovLyB0cnlpbmcgdG8gZmluZCB0aGUgbWluaW11bSBvZGQgbnVtYmVyIGluIGFuIGFycmF5IHdpdGgganVzdCBldmVuIG51bWJlcnMgKG9yIG5vIG51bWJlcnMpIGlzIFVCCmludCBvZGRtaW4oaW50ICphcnJheSwgc2l6ZV90IGxlbmd0aCkgewogICAgc2l6ZV90IGluZGV4ID0gMDsKICAgIHdoaWxlIChhcnJheVtpbmRleF0gJSAyID09IDApIGluZGV4Kys7IC8qIHNraXAgZXZlbiBudW1iZXJzICovOwogICAgaW50IG1pbm9kZCA9IGFycmF5W2luZGV4KytdOyAvLyBmaXJzdCBvZGQgbnVtYmVyCiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKICAgICAgICBpZiAoYXJyYXlbaW5kZXhdICUgMikgewogICAgICAgICAgICBpZiAoYXJyYXlbaW5kZXhdIDwgbWlub2RkKSBtaW5vZGQgPSBhcnJheVtpbmRleF07CiAgICAgICAgfQogICAgICAgIGluZGV4Kys7CiAgICB9CiAgICByZXR1cm4gbWlub2RkOwp9CgppbnQgbWFpbih2b2lkKSB7CiAgICBpbnQgYVtdID0gezEsIDIsIDMsIC00LCAtNSwgLTYsIDcsIDgsIDl9OwogICAgcHJpbnRmKCJvZGQgbWluaW11bSBvZiBhcnJheSBhIGlzICVkLlxuIiwgb2RkbWluKGEsIDkpKTsKICAgIGludCBiW10gPSB7MTAwMX07CiAgICBwcmludGYoIm9kZCBtaW5pbXVtIG9mIGFycmF5IGIgaXMgJWQuXG4iLCBvZGRtaW4oYiwgMSkpOwogICAgaW50IGNbXSA9IHsyLCAyLCAyLCAyLCAyLCAyLCAyLCAtMywgMiwgMiwgMiwgMiwgMiwgMn07CiAgICBwcmludGYoIm9kZCBtaW5pbXVtIG9mIGFycmF5IGMgaXMgJWQuXG4iLCBvZGRtaW4oYywgc2l6ZW9mIGMgLyBzaXplb2YgKmMpKTsKICAgIGludCBkW10gPSB7MiwgMiwgMiwgMiwgMiwgMiwgMiwgLTMsIDIsIDIsIDIsIC01LCAyLCAyfTsKICAgIHByaW50Zigib2RkIG1pbmltdW0gb2YgYXJyYXkgZCBpcyAlZC5cbiIsIG9kZG1pbihkLCBzaXplb2YgZCAvIHNpemVvZiAqZCkpOwogICAgaW50IGVbXSA9IHsyLCAyLCAyLCAyLCAyLCAyLCAyLCAtNSwgMiwgMiwgMiwgLTMsIDIsIDJ9OwogICAgcHJpbnRmKCJvZGQgbWluaW11bSBvZiBhcnJheSBlIGlzICVkLlxuIiwgb2RkbWluKGUsIHNpemVvZiBlIC8gc2l6ZW9mICplKSk7CiAgICBpbnQgZltdID0gezQyLCA0MiwgNDIsIDQyfTsKICAgIHByaW50Zigib2RkIG1pbmltdW0gb2YgYXJyYXkgZiBpcyAqKlVCKiogKCVkKS5cbiIsIG9kZG1pbihmLCBzaXplb2YgZiAvIHNpemVvZiAqZikpOwogICAgaW50IGdbXSA9IHszLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzfTsKICAgIHByaW50Zigib2RkIG1pbmltdW0gb2YgYXJyYXkgZyBpcyAlZC5cbiIsIG9kZG1pbihnLCBzaXplb2YgZyAvIHNpemVvZiAqZykpOwp9Cg==