迴旋數就是從中間的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 ...