这样的水题也被我WA了几次,惭愧啊! 就是就是没有注意当i > j 时输出位置不变的问题
看来做题目一定要细心,小心陷阱
我的代码:
1
#include <stdio.h>
2
#include <stdlib.h>
3![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
4
int cylen (int a, int b)
5![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif)
{
6
int max = 0;
7
for (int i = a; i <= b; i ++)
8![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
9
int n = i;
10
int count = 1;
11
while ( n != 1)
12![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
13
count ++;
14
if ( n % 2 == 0)
15
n = n / 2;
16
else
17
n = 3 * n + 1;
18
}
19
20
if (max < count)
21
max = count;
22
}
23
return max;
24
}
25![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
26
int main ()
27![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif)
{
28
int i, j;
29
while ( scanf ("%d %d", &i, &j) != EOF )
30![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
31
int index;
32
if (i > j)
33![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
34
index = i;
35
i = j;
36
j = index;
37
printf ("%d %d %d\n", j, i, cylen (i, j));
38
}
39
else
40
printf ("%d %d %d\n", i, j, cylen (i, j));
41
}
42
43
//system ("pause");
44
return 0;
45
}
46![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
网上的代码:用递归做的,两个代码复杂度完全一样
1
# include <stdio.h>
2
#include <stdlib.h>
3
int fun(long a ,int len)
4![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif)
{
5
if (a ==1)
6
return len;
7
else if (a %2 ==0)
8
return fun(a/2,len+1);
9
else return fun(3*a+1,len +1);
10
}
11
int main()
12![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif)
{
13
unsigned long a,b;
14
unsigned long i,max,temp;
15![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
16
while (scanf("%ld%ld",&a,&b)!=EOF)
17![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
18
printf("%ld %ld ",a,b);
19![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(a>b)
{i = a;a=b;b=i;}
20
for (max = 0,i = a; i <= b; i ++)
21![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
22
temp = fun(i,1);
23
if (max < temp)
24
max = temp;
25
}
26
printf("%ld\n",max);
27
}
28
//system ("pause");
29
return 0;
30
}
31![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
posted on 2010-08-23 19:42
雪黛依梦 阅读(333)
评论(0) 编辑 收藏 引用 所属分类:
简单题