解析: 其实只要求等差数列前n项和就行。
1 #include <stdio.h> 2 static void initialize(); 3 struct block{ 4 int b; 5 int tag; 6 }a[10000]; 7 8 int main() 9 { 10 int n, i, m1, m2; 11 initialize(); 12 while(scanf("%d", &n) == 1){ 13 for(i = 1; i < 10000; i++) 14 if(a[i].b >= n) 15 break; 16 int t = a[i].b - n; 17 if(a[i].tag == '下'){ 18 m1 = t + 1; 19 m2 = i + 1 - m1; 20 } 21 else{ 22 m2 = t + 1; 23 m1 = i + 1 - m2; 24 } 25 printf("TERM %d IS %d/%d\n", n, m2, m1); 26 } 27 return 0; 28 } 29 static void initialize() 30 { 31 int i; 32 for(i = 1; i < 10000; i++){ 33 a[i].b = i * (i + 1) / 2; 34 if(i % 2) 35 a[i].tag = '上'; 36 else 37 a[i].tag = '下'; 38 } 39 }