算法题答案
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),道理一樣。
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
總結
- 上一篇: Python学习教程实用技法:通过公共键
- 下一篇: C++ 函数部分(1)