Back to list of problems
Traffic Lights
161.c
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> int num; int cycles[100]; int green(int i, int j) { i %= (2*cycles[j]); if ((i>=0) && (i<cycles[j]-5)) { return 1; } else { return 0; } } void calculate(void) { int start=cycles[0]-5; int i,j; for(i=0; i<num; i++) { if ((cycles[i]-5)<start) { start=cycles[i]-5; } } for(i=start; i<=5*60*60; i++) { int ok=1; for(j=0; j<num; j++) { if (!green(i,j)) { ok=0; break; } } if (ok) { printf("%02d:%02d:%02d\n", i/3600, (i%3600)/60, i%60); return; } } printf("Signals fail to synchronise in 5 hours\n"); } int main(int argc, char *argv[]) { int a,b,c; while(1) { while(fscanf(stdin, " %d %d %d", &a, &b, &c)!=3) { exit(1); } num=2; cycles[0]=a; cycles[1]=b; if ((a==0) && (b==0) && (c==0)) { exit(0); } else while(c!=0) { cycles[num++]=c; if (fscanf(stdin, " %d", &c)!=1) { exit(1); } } calculate(); } exit(0); }