算法题答案

2.
int MaxSum(int A[],int n)
{
    int sum = 0;
    int MaxSum = 0;
    for(int  i= 0 ;i<n;i++)
    {
        sum +=A[ i];
        if( sum > MaxSum)
            MaxSum = sum;
        else if(sum < 0)
            sum = 0;
    }
    return sum;
}
3.
(1)种方法,建立一个数组A[N],遍历原数组,将对应的数i,置A[i]为1.再遍历A[N],如果有为0的,则有重复的。
(2)类似的方法,设置一个N位的数,并置各位为1,当i存在时,置第i位为0。比较最后结果是否为0
(3)将N个数相乘,比较最后结果是否为N!
(4)将结果相加,比较最后结果是否为N(N+1)/2;
4.这是计算机图形学的问题,可以先化1/8圆,再用对称法画出来。使用中点Bresenham方法,关键是得到决策方程d=1-R,x=0,y=R.判断d的符号,d<0,则将d<-d+2x+3,(x,y)->(x+1,y),否则d->d+2(x-y)+5,(x,y)->(x+1,y-1)
void DrawCircle(int r)
{
    int d = 1-r,x = 0,y=r;
    while(x<=y)
    {
        DrawPoint(x,y)
        if(d<0)
        {
            d = d+2*x+3;
          }
        else
        {
            d = d+2*(x-y)+5;
            y = y-1;
        }
        x = x+1;
        }
    }
}
5.使用递归算法。
 void   PrintDigit(long n)
{
    if( n >=10)
        PrintDigit( n /10)
    putchar( n % 10 +'0);   
}
其中n % 10 可以用n-(n/10)*10 得到,以加快运算步骤.

6.
一个数为2的幂的话,则所有位中只有一个1,通过判断X&(X-1) 是否为0即可判断(因为如果超出一个1的话,则X-1必会保留某个原来为1 的位置,从而两者相与不可能为0)
类似的,判断一个数是否2^n -1 ,则只需判断X(X+1),道理一样。
posted @ 2006-06-06 20:40 Ray Wu 阅读(287) 评论(1)  编辑 收藏 所属分类: 数据结构与算法

  回复  引用    
#1楼 2007-11-27 20:46 | 和 [未注册用户]
好,太好了

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2006-06-06 21:33 编辑过


相关链接: