有趣的数-85

描述

把分数按下面的办法排成一个数表。

1/1 1/2 1/3 1/4.....

2/1 2/2 2/3....

3/1 3/2 ....

4/1..... .........

我们以z字型方法给上表的每项编号。特定方法:第一项是1/1,然后是1/2、2/1、3/1、2/2、1/3、1/4、2/3……。编程输入项号N(1<=N<=100000),输出表中第N项。

 
输入
第一行有一个整数m(0<m<=10),表示有m组测试数据; 随后有m行,每行有一个整数N;
输出
输出表中第N项
样例输入
4
3
14
7
12345
样例输出
2/1
2/4
1/4
59/99

 1 #if 0
 2 //超时了~
 3 #include <stdio.h>
 4 int main()
 5 {
 6     int m, n, sum, i, d;
 7     scanf("%d", &m);
 8     while(m--){
 9 
10             scanf("%d", &n);
11             sum = 0;
12             i   = 0;
13             while(sum < n){
14                 
15                     ++i;
16                     sum += i;
17                     
18             }
19             if(sum == n)
20             {
21                 if(i%2 == 0)
22                 {
23                     m = i;
24                     n = 1;
25                 }
26                 else
27                 {
28                     m = 1;
29                     n = i;
30                 }
31 
32             }
33             else
34             {
35                 d = sum-n;
36                 if(i%2 == 0)
37                 {                
38                     m = i-d;
39                     n = 1+d;
40                 }
41                 else
42                 {
43                     m = 1+d;
44                     n = i-d;
45                 }
46             }
47             printf("%d/%d
", m, n);
48     
49     }
50     return 0;
51 }
52 #endif
53 
54 /*ac了,和上面相比,减少了几个判断*/
55 #include <stdio.h>
56 int main()
57 {
58     int m, n, sum, i;
59     scanf("%d", &m);
60     while(m--){
61 
62             scanf("%d", &n);
63             sum = 0;/*存放遍历过的项的个数*/
64             i   = 0;/*存放每一斜行的项的个数*/
65             while(sum < n){/*判断在第几斜行*/
66                 
67                     ++i;
68                     sum += i;
69                     
70             }
71             if(i%2 == 0)
72             {
73                 printf("%d/%d
", n-sum+i, sum-n+1);
74             }
75             else
76             {
77                 printf("%d/%d
", sum-n+1, n-sum+i);
78             }
79 
80     }
81     return 0;
82 }
View Code
原文地址:https://www.cnblogs.com/the-one/p/3280637.html