算法题答案

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 on 2006-06-06 20:40  Ray Wu  阅读(545)  评论(1编辑  收藏  举报