Problem description |
有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝? |
Input |
输入文件最多包含10组测试数据,每个数据占一行,仅包含一个正整数n(1<=n<=100),表示小张手上的空汽水瓶数。n=0表示输入结束,你的程序不应当处理这一行。 |
Output |
对于每组测试数据,输出一行,表示最多可以喝的汽水瓶数。如果一瓶也喝不到,输出0。 |
Sample Input |
3 10 81 0 |
Sample Output |
1 5 40 |
Problem Source |
The Sixth Hunan Collegiate Programming Contest |
[WebMethod] public int NullQiWatePing_Q(int n) { //2->1 (2/3=0,2,0+2=2,[1]+2=3,3/3=1) //3->1 (3/3=1) //4->2 (4/3=1,1;1+1=2,[1]+2=3,3/3=1) //5->2 (5/3=1,2;1+2=3,3/3=1) //6->2 (6/3=2) //7->3 (7/3=2,1;2+1=3;3/3=1) //8->4 (8/3=2,2;2+2=4) //10->5 (10/3=3,1;3/3=1;1+1=2;3-2=1) int rbc = 0; if (n < 1) return rbc; if (n == 2) return 1; int z = n / 3; //整数部分 int y=n%3; //余数部分 if (z == 0) return z; return z + NullQiWatePing_Q(z + y); } [WebMethod] public void NullQiWatePing_Q_Loop() { for (int i = 0; i < 100; i++) { this.Context.Response.Write(i.ToString() + "=" + NullQiWatePing_Q(i).ToString() + "<br>"); } }
结果为:
空汽水瓶个数=可喝汽水瓶个数
0=0
1=0
2=1
3=1
4=2
5=2
6=3
7=3
8=4
9=4
10=5
11=5
12=6
13=6
14=7
15=7
16=8
17=8
18=9
19=9
20=10
21=10
22=11
23=11
24=12
25=12
26=13
27=13
28=14
29=14
30=15
31=15
32=16
33=16
34=17
35=17
36=18
37=18
38=19
39=19
40=20
41=20
42=21
43=21
44=22
45=22
46=23
47=23
48=24
49=24
50=25
51=25
52=26
53=26
54=27
55=27
56=28
57=28
58=29
59=29
60=30
61=30
62=31
63=31
64=32
65=32
66=33
67=33
68=34
69=34
70=35
71=35
72=36
73=36
74=37
75=37
76=38
77=38
78=39
79=39
80=40
81=40
82=41
83=41
84=42
85=42
86=43
87=43
88=44
89=44
90=45
91=45
92=46
93=46
94=47
95=47
96=48
97=48
98=49
99=49