解析:  其实只要求等差数列前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 }