Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <limits.h>
- unsigned int gcd( unsigned int a, unsigned int b );
- unsigned int lcm( unsigned int a, unsigned int b );
- int main ( int argc, char * argv[] )
- {
- int n, i, h, m;
- unsigned int meet = 1;
- unsigned int trainInt[20];
- puts( "Zadejte pocet vlaku:" );
- if ( scanf( "%d", &n ) != 1 || n < 1 || n > 20 )
- {
- puts ( "Nespravny vstup." );
- return 1;
- }
- for ( i = 0; i < n; i++ )
- {
- printf( "Interval vlaku %d:\n", i + 1 );
- if ( scanf( "%d:%d", &h, &m ) != 2 || m > 59 || h + m == 0 || h < 0 || m < 0 )
- {
- puts ( "Nespravny vstup." );
- return 1;
- }
- trainInt[i] = 60 * h + m;
- }
- for ( i = 0; i < n; i++ )
- {
- if ( lcm( meet, trainInt[i] ) == UINT_MAX )
- {
- puts( "Vysledek mimo rozsah datoveho typu." );
- return 0;
- }
- meet = lcm( meet, trainInt[i] );
- }
- printf( "Vsechny vlaky se potkaji za: %d:%.2d\n", meet / 60, meet % 60);
- puts( "Mezitim projede:" );
- for ( i = 0; i < n; i++ )
- {
- printf( "* vlak %d: %dx", i+1, ( meet / trainInt[i] ) - 1 );
- if ( i < n - 2 )
- printf( ",\n" );
- if ( i == n - 2 )
- printf( " a\n" );
- if ( i == n - 1)
- printf( ".\n" );
- }
- return 0;
- }
- unsigned int gcd( unsigned int a, unsigned int b )
- {
- unsigned int tmp;
- while ( b != 0 )
- {
- tmp = a;
- a = b;
- b = tmp % b;
- }
- return a;
- }
- unsigned int lcm( unsigned int a, unsigned int b )
- {
- unsigned long int x = ( unsigned long int ) a * b;
- if ( x > UINT_MAX )
- return UINT_MAX;
- return (a * b) / gcd( a, b );
- }
Advertisement
Add Comment
Please, Sign In to add comment