|
![]() | 作者: windflower [windflower]
![]() |
登录 |
例如:输入29 求 2的平方+9的平方=85 8的平方+5的平方=89 8的平方+9的平方=145 1的平方+4的平方+5的平方=42 4的平方+2的平方=20 2的平方+0的平方=4 当程序等于4或1的时候结束!! 还请各位大显身手,看谁的程序做得最好,让大家都来看看。 |
地主 发表时间: 04-09-03 00:30 |
![]() | 回复: blegding [blegding] ![]() |
登录 |
楼![]() |
B1层 发表时间: 04-09-03 18:52 |
![]() | 回复: windflower [windflower] ![]() |
登录 |
把一个数的每位平方和,成一新的数,如此不断直至结果为4或1时结束。 |
B2层 发表时间: 04-09-03 18:57 |
![]() | 回复: windflower [windflower] ![]() |
登录 |
#include<stdio.h> int fun(int i) { int m=0; while(i) { m=i%10; i/=10; return m*m+fun(i); } } void main() { int n; printf("n="); scanf("%d",&n); while(n!=1&&n!=4) { n=fun(n); printf("%d\n",n); } } |
B3层 发表时间: 04-09-04 18:31 |
![]() | 回复: lida1818 [lida1818] ![]() |
登录 |
这个问题用递归效率不好。 |
B4层 发表时间: 04-09-04 19:53 |
![]() | 回复: sniper167 [sniper167] ![]() |
登录 |
那怎样效率才高点呢? |
B5层 发表时间: 04-09-04 23:16 |
![]() | 回复: xiaoshi [xiaoshi] ![]() |
登录 |
盗版“风无情” *********************************************** #include<stdio.h> int fun(int i) { int m=0,z=0; while(i) { m=i%10; i/=(i%10)10; z/=10; return m*m+i*i+z*z; } } void main() { int n; printf("n="); scanf("%d",&n); if(n<1000) do { n=fun(n); printf("%d\n",n); } while(n!=1&&n!=4); } **************************************************************** ![]() 我看到了这两句: 1 1的平方+4的平方+5的平方=42 2 当程序等于4或1的时候结束!! 不知道我想的是否与题意相符! |
B6层 发表时间: 04-09-05 10:25 |
![]() | 回复: kert_t8 [kert_t8] ![]() |
登录 |
For every certain number, the number of steps is certain. For example, you can't find another way to get 4. So, I don't think there's much space that you can optimize your program so that it could run clearly faster. The time complexity is n of theta sorry that I can't speak in chinese:) pinyin: yi shang jian jie chun shu ge ren yi jian, ru you lei tong, shi shu qiao he, ru guo cuo le, e mi tuo fo. |
B7层 发表时间: 04-09-11 06:17 |
![]() | 回复: hannyu [hannyu] ![]() |
登录 |
恩,既然各个环节是递推关系,用循环就可以解决问题,用递归不见得思路清晰 |
B8层 发表时间: 04-09-11 21:58 |
![]() | 回复: windflower [windflower] ![]() |
登录 |
楼上的不要光说不练 把用循环的代码写出来才是强。 |
B9层 发表时间: 04-09-14 19:40 |
![]() | 回复: zqpd [zqpd] ![]() |
登录 |
我没有用C++调试过,希望高手指导,谢谢! #include<stadio.h> {void main() int i=29,j,k,z,temp; j=i/10;k=i%10; z=j*j+k*k; if(z!=0||z!=4) {for{temp=i; i=z; z=temp; } } } |
B10层 发表时间: 04-09-15 11:25 |
![]() | 回复: windflower [windflower] ![]() |
登录 |
楼上的,请你复习。 |
B11层 发表时间: 04-09-15 23:44 |
![]() | 回复: zqpd [zqpd] ![]() |
登录 |
更正: #include<stadio.h> void main() {int i=29,j,k,z,temp; for(j=i/10;k=i%10;j!=k) z=j*j+k*k if(z!=0||z!=4) {temp=i; i=z; z=temp; }else cout<<end<<"endle"; } |
B12层 发表时间: 04-09-16 11:09 |
![]() | 回复: windflower [windflower] ![]() |
登录 |
无言的结局 |
B13层 发表时间: 04-09-16 19:17 |
![]() | 回复: lida1818 [lida1818] ![]() |
登录 |
TO:windflower 你很固执啊,你试试以下两个程序: #include <stdio.h> #include <dos.h> #include <time.h> main() { int n,t=0,i,j; time_t first, second; first = time(NULL); for(j=0;j<100;j++) for(i=10;i<5000;i++) { n=i; while(n) { while(n)t+=(n%10)*(n%10),n/=10; if(t==1||t==4)break; n=t,t=0; } t=0; } second = time(NULL); printf("The difference is: %f seconds\n",difftime(second,first)); } ========================== #include <stdio.h> #include <dos.h> #include <time.h> int fun(int i) { int m=0; while(i) { m=i%10; i/=10; return m*m+fun(i); } } void main() { int n,i,j; time_t first, second; first = time(NULL); for(j=0;j<100;j++) for(i=10;i<5000;i++) { n=i; while(n!=1&&n!=4) { n=fun(n); } } second = time(NULL); printf("The difference is: %f seconds\n",difftime(second,first)); } |
B14层 发表时间: 04-09-16 20:20 |
![]() | 回复: lida1818 [lida1818] ![]() |
登录 |
在我的机上测试,用递归的要慢30%,如果你的机器好,就加大循环 |
B15层 发表时间: 04-09-16 20:24 |
![]() | 回复: bay [coming] ![]() |
登录 |
提醒大家程序是2个字1"精简" |
B16层 发表时间: 04-09-23 13:26 |
![]() | 回复: aini76 [aini76] ![]() |
登录 |
我知道你C语言学的好 教教我好么 |
B17层 发表时间: 04-09-24 00:34 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号