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; }