您的位置:首页 > 其它

hdoj1032 3n+1问题

2014-05-26 12:16 190 查看
链接
http://acm.nyist.net/JudgeOnline/problem.php?pid=271
代码1 : 每次都要调用一次函数 有些浪费时间 !!

View Code

Problem : 1032 (The 3n + 1 problem ) Judge Status : Accepted RunId : 10087220 Language : C Author : sws Code Render Status : Rendered By HDOJ C Code Render Version 0.01 Beta#include<stdio.h> int f(int x ) { int y = 1; while(x != 1 ) { y ++; if(x%2 ) x = 3*x+1; else x = x/2; } return y; } int main() { int i, j, maxn, m, k, n; while(scanf("%d%d",&i,&j)==2){ //只有当i,j都正确读入整数时(2项),才进行下一步 //scanf("%d%d", &i, &j ); maxn = 0; n = i; m = j; if(i>j) { k = i; i = j; j = k; } for(; i<=j; i ++ ) if(maxn < f(i) ) maxn = f(i); //n = n > m? n:m; printf("%d %d %d\n", n, m, maxn ); } return 0; } #include<stdio.h> int f(int x ) { int y = 1; while( x != 1 ) { y ++; if( x%2 ) x = 3*x+1; else x = x/2; } return y; } int main() { int i, j, maxn, m, k, n; while(scanf("%d%d",&i,&j)==2){ //只有当i,j都正确读入整数时(2项),才进行下一步 //scanf("%d%d", &i, &j ); maxn = 0; n = i; m = j; if( i>j) { k = i; i = j; j = k; } for(; i<=j; i ++ ) if( maxn < f(i) ) maxn = f(i); //n = n > m? n:m; printf( "%d %d %d\n", n, m, maxn ); } return 0; }


代码2: 再加一个函数 就解决了函数重复调用的问题 节约时间!


查看代码---运行号:724144----结果:Accepted

运行时间:2014-02-18 14:32:18 | 运行人:shengweisong

view source

print?

01.
#include<stdio.h> 
 //TL原因估计是每次都要调用函数


02.
#define
 MAX 10001


03.
int
a[MAX];


04.
int
f(
int
x
 )


05.
{


06.
int
y
 = 1;


07.
while
(
 x != 1 )


08.
{


09.
y
 ++;


10.
if
(
 x%2 )


11.
x
 = 3*x+1;


12.
else


13.
x
 = x/2;


14.


15.
}


16.
return
y;


17.
}


18.
void
CountA(){


19.
for
(
int
i
 = 1; i != MAX; ++i)


20.
a[i]
 = f(i);


21.
}


22.
int
main()


23.
{


24.
CountA();
// 如在前面加一个void 就不起作用了!! 就在这我纠结了半天!!


25.
register
int
i,
 j, maxn, m, k, n;


26.


27.
while
(
scanf
(
"%d%d"
,&i,&j)!=EOF
 ){
//只有当i,j都正确读入整数时(2项),才进行下一步


28.
//scanf(
 "%d%d", &i, &j );


29.
maxn
 = 0;


30.
n
 = i;


31.
m
 = j;


32.
if
(
 i>j)


33.
{


34.
k
 = i;


35.
i
 = j;


36.
j
 = k;


37.
}


38.
for
(
 ; i<=j; i ++ )


39.
if
(
 maxn < a[i] )


40.
maxn
 = a[i];


41.
//n
 = n > m? n:m;


42.
printf
(
"%d
 %d %d\n"
,
 n, m, maxn );


43.
}


44.
return
0;


45.
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: