http://acm.pku.edu.cn/JudgeOnline/problem?id=1044

Код:
#include <stdio.h>
#include <math.h>
int mod(int);
int find_max(void);
int count_z(int);
int y[20], a[20], b[20];
int d[20], n;
main(){
    int max, z;
    int i, k = 0;
    while ( 1 ) {
        scanf("%d", &n);
        if ( n == 0 ) break;
        for ( i = 0 ; i < n ; i++ ){
            scanf("%d %d %d", &y[i], &a[i], &b[i]);
            d[i] = a[i]-b[i]; 
            if (d[i]<0) d[i]=-d[i];}
        k++;
        max = find_max();
        z = count_z(max);
        printf("Case #%d:\n", k);
        if ( z < 10000 ) printf("The actual year is %d.\n", z);
        else printf("Unknown bugs detected.\n");
        printf("\n"); }
}
int mod(int num){
    int i;
    for ( i = 0 ; i < n ; i++ )
        if ( ( num - y[i] ) % d[i] != 0 ) return 0;
    return 1;
}
int count_z(int z){
    int i;
    while ( z < 10000 ) {
        if ( mod(z) == 1 ) return z;
        z++; }
    return 10001;
}
int find_max(void){
    int i;
    int max;
    max = y[0];
    for ( i = 1 ; i < n ; i++ )
        if ( max < y[i] )  max = y[i];
    return max;
}