迴旋數的求解

2021-06-10 10:01:07 字數 1173 閱讀 7839

迴旋數就是從中間的1開始然後圍繞著這個1,按自然數的增長形式迴旋1,如:

1、解決的的思路

a、 首先得到這個數的基數(即每一環開始的數),

b、 然後得到其座標所屬第幾排,

c、再次計算其位於這一排的位置,

d、最後算出結果。

2、針對個步驟所需要的程式設計指南

a、需要知道他前面的總數,設定了乙個遞迴函式來求出來

intf(intn)//

return f(n-1)+(n-1)*8; }

那麼其基數就是

intbegin=f(level)+1;//

level為他屬於第幾環

b、使用兩個巨集

#definemax(a,b) (a)>(b)?(a):(b)//

#defineabs(a) (a)<0?-(a):(a)//

if(x==level)//第一排

elseif(y==level) //第二排;

elseif(x==-level) //第三排;

其他為第四排

c、第幾個需要自己看了

d計算ok

以下為程式

#include

#define max(a,b)  (a)>(b)?(a):(b)   //

#define abs(a)  (a)<0?-(a):(a)   //求的a的絕對值;

using namespace std;

int f(int n)   //得到第幾層的基數-1值;

return f(n-1)+(n-1)*8;

}int foo(int x,int y)

int m=2*level+1;  //每層的每一排所擁有的個數;

int k=abs(x+y);  //在這一排中居於第幾個;

int begin=f(level)+1;  //得到每一層的基數;

int result=0;

//以下開始判斷其座標屬於那一層;

if (x==level)  //第一排;

else

}else if (y==level)  //第二排;

else if (x==-level) //第三排;

else

return result;

}void main()

cout<

自己寫的迴旋數演算法

貌似有人會看,就貼一下。這個演算法只用了乙個while迴圈就可以全部複製,效率上應該比那些很多for迴圈的好些。所謂迴旋數,就是下面這樣 3的迴旋數 13 12 11 10 9 迴旋矩陣 public static void main string args 回形賦值,重點是控制賦值時候x,y的轉換...

醜數的求解

題目 我們把只包含因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第1500個醜數。思路 如果能夠根據已經計算好的醜數,計算出下乙個醜數就可以避免這種情況,實現從醜數到醜數的高效演算法,根據定義...

迴旋鏢的數量

給定平面上n 對不同的點,迴旋鏢 是由點表示的元組 i,j,k 其中i和j之間的距離和i和k之間的距離相等 需要考慮元組的順序 找到所有迴旋鏢的數量。你可以假設n 最大為500,所有點的座標在閉區間 10000,10000 中。示例 輸入 0,0 1,0 2,0 輸出 2解釋 兩個迴旋鏢為 1,0 ...