论坛: 编程破解 标题: 一个小程序,反映出你是不是编程的料。 复制本贴地址    
作者: 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]   论坛用户   登录
啊,题目的意思我怎么看不懂啊?我想用c来试试!~呵呵

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号