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),道理一样。
转载于:https://www.cnblogs.com/drunkyong/archive/2006/06/06/419008.html