導航:首頁 > 源碼編譯 > 圓盤指標源碼

圓盤指標源碼

發布時間:2022-09-25 17:16:03

Ⅰ 求數據結構形式的漢諾塔源代碼

●漢諾塔演算法的遞歸實現C++源代碼

#include <fstream>
#include <iostream>
using namespace std;
ofstream fout("out.txt");
void Move(int n,char x,char y)
{
fout<<"把"<<n<<"號從"<<x<<"挪動到"<<y<<endl;
}
void Hannoi(int n,char a,char b,char c)
{
if(n==1)
Move(1,a,c);
else
{
Hannoi(n-1,a,c,b);
Move(n,a,c);
Hannoi(n-1,b,a,c);
}
}
int main()
{
fout<<"以下是7層漢諾塔的解法:"<<endl;
Hannoi(7,'a','b','c');
fout.close();
cout<<"輸出完畢!"<<endl;
return 0;
}●漢諾塔演算法的遞歸實現C源代碼:

#include<stdio.h>
void hanoi(int n,char A,char B,char C)
{
if(n==1)
{
printf("Move disk %d from %c to %c\n",n,A,C);
}
else
{
hanoi(n-1,A,C,B);
printf("Move disk %d from %c to %c\n",n,A,C);
hanoi(n-1,B,A,C);
}
}
main()
{
int n;
printf("請輸入數字n以解決n階漢諾塔問題:\n");
scanf("%d",&n);
hanoi(n,'A','B','C');
}

●漢諾塔演算法的非遞歸實現C++源代碼

#include <iostream>
using namespace std;

//圓盤的個數最多為64
const int MAX = 64;

//用來表示每根柱子的信息
struct st{
int s[MAX]; //柱子上的圓盤存儲情況
int top; //棧頂,用來最上面的圓盤
char name; //柱子的名字,可以是A,B,C中的一個
int Top()//取棧頂元素
{
return s[top];
}
int Pop()//出棧
{
return s[top--];
}
void Push(int x)//入棧
{
s[++top] = x;
}
} ;

long Pow(int x, int y); //計算x^y
void Creat(st ta[], int n); //給結構數組設置初值
void Hannuota(st ta[], long max); //移動漢諾塔的主要函數

int main(void)
{
int n;
cin >> n; //輸入圓盤的個數
st ta[3]; //三根柱子的信息用結構數組存儲
Creat(ta, n); //給結構數組設置初值

long max = Pow(2, n) - 1;//動的次數應等於2^n - 1
Hannuota(ta, max);//移動漢諾塔的主要函數

system("pause");
return 0;
}

void Creat(st ta[], int n)
{
ta[0].name = 'A';
ta[0].top = n-1;
//把所有的圓盤按從大到小的順序放在柱子A上
for (int i=0; i<n; i++)
ta[0].s[i] = n - i;
//柱子B,C上開始沒有沒有圓盤
ta[1].top = ta[2].top = 0;
for (int i=0; i<n; i++)
ta[1].s[i] = ta[2].s[i] = 0;
//若n為偶數,按順時針方向依次擺放 A B C
if (n%2 == 0)
{
ta[1].name = 'B';
ta[2].name = 'C';
}
else //若n為奇數,按順時針方向依次擺放 A C B
{
ta[1].name = 'C';
ta[2].name = 'B';
}
}

long Pow(int x, int y)
{
long sum = 1;
for (int i=0; i<y; i++)
sum *= x;

return sum;
}

void Hannuota(st ta[], long max)
{
int k = 0; //累計移動的次數
int i = 0;
int ch;
while (k < max)
{
//按順時針方向把圓盤1從現在的柱子移動到下一根柱子
ch = ta[i%3].Pop();
ta[(i+1)%3].Push(ch);
cout << ++k << ": " <<
"Move disk " << ch << " from " << ta[i%3].name <<
" to " << ta[(i+1)%3].name << endl;
i++;
//把另外兩根柱子上可以移動的圓盤移動到新的柱子上
if (k < max)
{ //把非空柱子上的圓盤移動到空柱子上,當兩根柱子都為空時,移動較小的圓盤
if (ta[(i+1)%3].Top() == 0 ||
ta[(i-1)%3].Top() > 0 &&
ta[(i+1)%3].Top() > ta[(i-1)%3].Top())
{
ch = ta[(i-1)%3].Pop();
ta[(i+1)%3].Push(ch);
cout << ++k << ": " << "Move disk "
<< ch << " from " << ta[(i-1)%3].name
<< " to " << ta[(i+1)%3].name << endl;
}
else
{
ch = ta[(i+1)%3].Pop();
ta[(i-1)%3].Push(ch);
cout << ++k << ": " << "Move disk "
<< ch << " from " << ta[(i+1)%3].name
<< " to " << ta[(i-1)%3].name << endl;
}
}
}
}

Ⅱ 起爆點指標和選股公式都是什麼意思

一、 股票起爆點的基本含義
一般來說,是股票開始漲的時候,但因為它是爆炸性的上漲,所以被稱為起爆點。
(一)起爆點的圓盤特徵
交易量擴大。長期融資後,主力逐漸控制盤面。一般來說,爆破前成交量會放大。
1.試探性引體向上。在爆發開始之前,主力一般會進行試探性的拉升,試探市場的追趕意願。
2.進行最後一道洗菜。這時股價往往波動較大,大陰大陽交替出現,以徹底擺脫下面的盤面。
3.突然大量拉升,迅速離開成本區。它的兇猛讓人敢看敢摸。連續交易是這種形態突破後最強的表現。 二、注意兩個啟動點 第一個爆點是短線操作的第一個也是最好的買入點。起點是,經過長時間的橫向盤整,主力已經完成募資和洗盤,處於向上突破的臨界點。
(二)起爆點的干預方法:
1.突破股價成交量新高的第一條陽線。
2.第一次攔回後股價在大放量突破新高(一般在領口附近介入)。 第二個啟動點(即第二個最佳買入點)——股價從第一個破發點上漲,進入另一個區間。這時由於利潤空間太大,主力會進行強制洗盤。經過一段時間的盤整,均線系統會逐漸上移,使得市場的持有成本上移並趨於一致。在第二波主升浪開始之前,就像最後一個破發點一樣,主力會邁出最後一步這種兇猛的洗盤會把那些不堅定的人從風車上推下來,然後向上突破放量,股價從地面上漲。其上升力度一般不低於前一個爆點,甚至進入主上升波。
3.如果不回調,說明該股很可能進入主升階段。這時候要根據交易量來決定。如果成交量萎縮上漲,意味著主力需要進一步提高股價,可以適量買入;如果成交量異常放大,連續幾天單日換手率超過30%,則需謹慎,這很可能是主力出貨的信號。
二、 選股公式
簡單說就是在股票軟體里,根據自己的條件要求編寫一個選股公式,讓電腦自動選出符合你條件要求的股票。
拓展資料:
一、如何抓住起爆點
市場裡面有句說的好,會買的是徒弟,會賣的師傅,會空倉的是師爺,但是我要說的是熊市裡面會買是第一要素。 那麼我們如何才是最好的介入時機呢? 我將為大家揭曉一種勝算非常高的買入技巧: 在市場的起爆點買入 買入時機要有一下幾大要素: 1:前一天縮量下跌,均線不要空頭排列; 2:第一天放量上漲,收陽線。但是不要出現非常長的上影線, 3:不是一口氣沖上漲停板的不要追高買,在分時的黃線,均價附近買入。分批買進; 以上幾點,是基本要素,只要按照這樣的方法買入,後續短期都會上漲,基本很難虧錢。
二、炒股應關注兩個起爆點
1.短線操作的第一個買點,也是最佳買入點。該起爆點就是股票經過長時間的橫盤整理,主力已經完成吸籌和洗盤,處於向上突破的臨界點。
2.第二起爆點(也即第二最佳買入點)------股價脫離第一起爆點後上升進入另區間。這時,由於獲利盤太多,主力會進行強制洗盤。經過一段時間的整理後,均線系統逐步上移,使市場的持股成本上移並趨於一致。在第二波主升浪展開前,猶如上一起暴點一樣,主力會做最後一次兇猛的洗盤,將不堅定者趕下跟風車,然後帶量向上突破,股價拔地而起,其上漲力度一般不亞於上一起爆點甚至進入主升浪。
三、第二起爆點的介入方法
1.在股價放量向上突破創出新高的第一根陽線介入。
2.在股價放量向上突破創出新高後的第一次回擋(一般在頸線位附近介入)。
3.如果不回擋,則說明該股很可能是進入主升階段,這時要視成交量的狀況再作決定。如果縮量上漲則說明主力要進一步拉高股價,可以適量買入;如果成交量異常放大而且連續幾天單日換手率超過30%則應謹慎,很可能是主力出貨的信號。

Ⅲ 水質監測的常規五項指標是哪些

污水的五個檢測項目一般是pH值檢測、SS項目檢測、氨氮檢測、BOD檢測和COD檢測。

這些項目的測試內容如下:

1、PH值檢測:指pH測試,也指氫離子濃度指數,即污水中氫離子總數與總物質含量的比值。

2、SS項目檢測:指水中懸浮物的檢測,包括不溶性無機物、有機物、砂、粘土、微生物等。懸浮物含量是衡量水體污染程度的重要指標之一。

3、氨氮檢測:氨氮是指水中游離氨和銨離子形式的氮,可導致水體富營養化。它是水體中的主要OD污染物,對魚類和某些水生生物具有毒性。

4、BOD檢測:指生化需氧量的檢測。生化需氧量是指微生物在一定時間內分解一定水量水所消耗的溶解氧量,是反映水體中有機污染物含量的重要指標。

5、COD檢測:化學需氧量檢測是測定水樣中需要氧化的還原性物質的量的化學方法,可以通過減少水中的物質來反映污染程度。


污水分類:

1、生活污水

生活污水是人類在日常生活中使用過的,並被生活廢料所污染的水。其水質、水量隨季節而變化,一般夏季用水相對較多,濃度低;冬季相應量少,濃度高。生活污水一般不含有毒物質,但是它有適合微生物繁殖的條件,含有大量的病原體,從衛生角度來看有一定的危害性。

2、工業廢水

工業廢水是在工礦生產活動中產生的廢水。工業廢水可分為生產污水與生產廢水。生產污水是指在生產過程中形成、並被生產原料、半成品或成品等原料所污染,也包括熱污染(指生產過程中產生的、水溫超過60℃的水);生產廢水是指在生產過程中形成,但未直接參與生產工藝、未被生產原料、半成品或成品等原料所污染或只是溫度少有上升的水。生

產污水需要進行凈化處理;生產廢水不需要凈化處理或僅需做簡單的處理,如冷卻處理。生活污水與生產污水的混合污水稱為城市污水。

3、初期雨水

被污染的雨水主要是指初期雨水。由於初期雨水沖刷了地表的各種污染物,污染程度很高,故宜作凈化處理。

4、水體受污染的原因:

人類生產活動造成的水體污染中,工業引起的水體污染最嚴重。如工業廢水,它含污染物多,成分復雜,不僅在水中不易凈化,而且處理也比較困難。

工業廢水,是工業污染引起水體污染的最重要的原因。它占工業排出的污染物的大部分。工業廢水所含的污染物因工廠種類不同而千差萬別,即使是同類工廠,生產過程不同,其所含污染物的質和量也不一樣。工業除了排出的廢水直接注入水體引起污染外,固體廢物和廢氣也會污染水體。

以上內容參考:網路-污水

Ⅳ 漢諾塔的其他相關

如果移動一個圓盤需要1秒鍾的話,等到64個圓盤全部重新落在一起,宇宙被毀滅是什麼時候呢?
讓我們來考慮一下64個圓盤重新摞好需要移動多少次吧。1個的時候當然是1次,2個的時候是3次,3個的時候就用了7次......這實在是太累了
因此讓我們邏輯性的思考一下吧。
3個的時候能夠移動最大的3盤時如圖所示。
到此為止用了7次。
接下來如右圖,在上面再放上3個圓盤時還要用7次(把3個圓盤重新放在一起需要的次數)。
因此,4個的時候是
「3個圓盤重新摞在一起的次數」+1次+「3個圓盤重新摞在一起需要的次數」
=2x「3個圓盤重新摞在一起的次數」+1次
=15次。
那麼,n個的時候是
2x「(n-1)個圓盤重新摞在一起的次數」+1次。
由於1 個的時候是1次,結果n個的時候為(2的n次方減1)次。
1個圓盤的時候 2的1次方減1
2個圓盤的時候 2的2次方減1
3個圓盤的時候 2的3次方減1
4個圓盤的時候 2的4次方減1
5個圓盤的時候 2的5次方減1
........
n個圓盤的時候 2的n次方減1
也就是說,n=64的時候是(2的64次方減1)次。
因此,如果移動一個圓盤需要1秒的話,
宇宙的壽命=2的64次方減1(秒)
2的64次方減1到底有多大呢?動動計算器,答案是一個二十位的數字約是
1.84467440*10^19
用一年=60秒x60分x24小時x365天來算的話,大約有5800億年吧。
太陽及其行星形成於50億年前,其壽命約為100億年。
漢諾塔問題在數學界有很高的研究價值,而且至今還在被一些數學家們所研究。
也是我們所喜歡玩的一種益智游戲,它可以幫助開發智力,激發我們的思維。 有三根相鄰的柱子,標號為A,B,C,A柱子上從下到上按金字塔狀疊放著n個不同大小的圓盤,要把所有盤子一個一個移動到柱子B上,並且每次移動同一根柱子上都不能出現大盤子在小盤子上方,請問至少需要多少次移動,設移動次數為H(n)。
首先我們肯定是把上面n-1個盤子移動到柱子C上,然後把最大的一塊放在B上,最後把C上的所有盤子移動到B上,由此我們得出表達式:
H⑴ = 1
H(n) = 2*H(n-1)+1 (n>1)
那麼我們很快就能得到H(n)的一般式:
H(n) = 2^n - 1 (n>0)
並且這種方法的確是最少次數的,證明非常簡單,可以嘗試從2個盤子的移動開始證,你可以試試。
進一步加深問題(解法原創*_*):
假如現在每種大小的盤子都有兩個,並且是相鄰的,設盤子個數為2n,問:⑴假如不考慮相同大小盤子的上下要多少次移動,設移動次數為J(n);⑵只要保證到最後B上的相同大小盤子順序與A上時相同,需要多少次移動,設移動次數為K(n)。
⑴中的移動相當於是把前一個問題中的每個盤子多移動一次,也就是:
J(n) = 2*H(n) = 2*(2^n - 1) = 2^(n+1)-2
在分析⑵之前
,我們來說明一個現象,假如A柱子上有兩個大小相同的盤子,上面一個是黑色的,下面一個是白色的,我們把兩個盤子移動到B上,需要兩次,盤子順序將變成黑的在下,白的在上,然後再把B上的盤子移動到C上,需要兩次,盤子順序將與A上時相同,由此我們歸納出當相鄰兩個盤子都移動偶數次時,盤子順序將不變,否則上下顛倒。
現在回到最開始的問題,n個盤子移動,上方的n-1個盤子總移動次數為2*H(n-1),所以上方n-1個盤子的移動次數必定為偶數次,最後一個盤子移動次數為1次。
討論問題⑵,
綜上兩點,可以得出,要把A上2n個盤子移動到B上,首先可以得出上方的2n-2個盤子必定移動偶數次,所以順序不變,移動次數為:
J(n-1) = 2^n-2
然後再移動倒數第二個盤子,移動次數為2*J(n-1)+1 = 2^(n+1)-3,
最後移動最底下一個盤子,所以總的移動次數為:
K(n) = 2*(2*J(n-1)+1)+1 = 2*(2^(n+1)-3)+1 = 2^(n+2)-5
開天闢地的神勃拉瑪(和中國的盤古差不多的神吧)在一個廟里留下了三根金剛石的棒,第一根上面套著64個圓的金片,最大的一個在底下,其餘一個比一個小,依次疊上去,廟里的眾僧不倦地把它們一個個地從這根棒搬到另一根棒上,規定可利用中間的一根棒作為幫助,但每次只能搬一個,而且大的不能放在小的上面。計算結果非常恐怖(移動圓片的次數)大約是1.84467440*10^19,眾僧們即便是耗盡畢生精力也不可能完成金片的移動了。 其實演算法非常簡單,當盤子的個數為n時,移動的次數應等於2^n – 1(有興趣的可以自己證明試試看)。後來一位美國學者發現一種出人意料的簡單方法,只要輪流進行兩步操作就可以了。首先把三根柱子按順序排成品字型,把所有的圓盤按從大到小的順序放在柱子A上,根據圓盤的數量確定柱子的排放順序:若n為偶數,按順時針方向依次擺放 A B C;
若n為奇數,按順時針方向依次擺放 A C B。
⑴按順時針方向把圓盤1從現在的柱子移動到下一根柱子,即當n為偶數時,若圓盤1在柱子A,則把它移動到B;若圓盤1在柱子B,則把它移動到C;若圓盤1在柱子C,則把它移動到A。
⑵接著,把另外兩根柱子上可以移動的圓盤移動到新的柱子上。即把非空柱子上的圓盤移動到空柱子上,當兩根柱子都非空時,移動較小的圓盤。這一步沒有明確規定移動哪個圓盤,你可能以為會有多種可能性,其實不然,可實施的行動是唯一的。
⑶反復進行⑴⑵操作,最後就能按規定完成漢諾塔的移動。
所以結果非常簡單,就是按照移動規則向一個方向移動金片:
如3階漢諾塔的移動:A→C,A→B,C→B,A→C,B→A,B→C,A→C
漢諾塔問題也是程序設計中的經典遞歸問題,下面我們將給出遞歸和非遞歸的不同實現源代碼。

Ⅳ 漢諾塔怎麼玩

一位美國學者發現的特別簡單的方法:只要輪流用兩次如下方法就可以了。

把三根柱子按順序排成「品」字型,把所有圓盤按從大到小的順序放於柱子A上,根據圓盤數量來確定柱子排放的順序:

n若為偶數的話,順時針方向依次擺放為:ABC;而n若為奇數的話,就按順時針方向依次擺放為:ACB。這樣經過反復多次的測試,最後就可以按照規定完成漢諾塔的移動。

因此很簡單的,結果就是按照移動規則向一個方向移動金片:

如3階漢諾塔的移動:A→C,A→B,C→B,A→C,B→A,B→C,A→C。

(5)圓盤指標源碼擴展閱讀:

由來

法國數學家愛德華·盧卡斯曾編寫過一個印度的古老傳說:在世界中心貝拿勒斯(在印度北部)的聖廟里,一塊黃銅板上插著三根寶石針。印度教的主神梵天在創造世界的時候,在其中一根針上從下到上地穿好了由大到小的64片金片,這就是所謂的漢諾塔。

不論白天黑夜,總有一個僧侶在按照下面的法則移動這些金片:一次只移動一片,不管在哪根針上,小片必須在大片上面。僧侶們預言,當所有的金片都從梵天穿好的那根針上移到另外一根針上時,世界就將在一聲霹靂中消滅,而梵塔、廟宇和眾生也都將同歸於盡。

android的自定圓盤菜單怎麼做

1、通用模式

上圖是圖片加文字,如果我想換成按鈕呢,或者我只需要圖片。這里就需要定製。怎麼辦呢,我採用了適配模式,大家都還記得 ListView的用法,我這里也借鑒了一下:

public void setAdapter(ListAdapter mAdapter) { this.mAdapter = mAdapter;
}123

這樣就可以實現Menu的高度定製。

2、構建菜單項

代碼參考buildMenuItems(),對mAdapter遍歷獲取子View,添加點擊事件,調用addView()添加到ViewGroup,這個時候系統就會調用onMeasure()對子View計算大小。

3、計算item大小

代碼參考measureMyself()和measureChildViews(),確定每個item的尺寸大小。

4、item布局

首先計算item(x,y)距離圓心的長度,我畫了一個草圖:

需要重寫onTouchEvent()方法,並把返回值改為true。處理手勢按下(ACTION_DOWN),抬起(ACTION_UP)的狀態。

首先我們要判斷手指按下是否在陰影局域內。注意手指按下是指尖局域與屏幕接觸,並不是一點,所以有誤差。

x = event.getX();
y = event.getY();if ((x - 圓心x) * (x - 圓心x) + (y - 圓心y) * (y - 圓心y) < (圓心x+ 誤差) * (圓心y+ 誤差)) {
isRange = true;
}12345

然後我們要計算運動的速度,我剛開始的想法是用重力加速度,非常感謝我同事小賈,他給了我更好的意見:速度=距離/時間。

ACTION_DOWN:

lastTouchTime = System.currentTimeMillis();1

ACTION_UP:

long timeStamp = System.currentTimeMillis() - lastTouchTime;float distance = (float) Math.sqrt((x1 - x) * (x1 - x) + (y1 - y) * (y1 - y)); float speed = distance / timeStamp;123

然後我們通過對比手指按下的x的坐標,和抬起x的坐標,來判斷用戶是向左滑,還是右滑。

if (x1 - x > 0) {
isLeft = false;
} else {
isLeft = true;
}12345

最後通過handler來改變每次運動的角度,使Menu很自然的旋轉了起來:

if (isLeft) { //向左轉動
offsetRotation -= ANGLE;
} else { //向右轉動
offsetRotation += ANGLE;
} //速度衰減
speed -= SPEED_ATTENUATION;
invalidate();//重繪
handler.sendEmptyMessageDelayed(EMPTY_MESSAGE, 50);1234567891011

使用

1、xml布局

<com.github.ws.viewdemo.widget.CircleMenuLayout
android:id="@+id/cm"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#f0f0f0">

</com.github.ws.viewdemo.widget.CircleMenuLayout>1234567

2、class文件

circleMenuLayout.setAdapter(new MyAdapter());

circleMenuLayout.setOnItemClickListener(new CircleMenuLayout.OnItemClickListener() {
@Override public void onItemClickListener(View v, int position) {
Toast.makeText(MainActivity.this, mList.get(position).text + "", Toast.LENGTH_SHORT).show();
}
});12345678

源碼我已上傳到github,地址https://github.com/HpWens/ViewDemo,再一次感謝大家的關注。

閱讀全文

與圓盤指標源碼相關的資料

熱點內容
excel能編程嗎 瀏覽:929
android系統框架的介紹 瀏覽:945
無盤系統伺服器如何配置 瀏覽:836
背負貸款如何緩解壓力 瀏覽:82
linux獲取日期時間 瀏覽:881
搬磚問題最合適的演算法 瀏覽:446
小米安卓機密碼忘記了如何解鎖 瀏覽:910
產電plc編程手冊 瀏覽:761
vscodephp 瀏覽:535
阿里雲linux桌面 瀏覽:754
php二維數組搜索 瀏覽:116
ps快捷命令工具箱 瀏覽:253
c4d教程pdf 瀏覽:462
linux集群安裝配置 瀏覽:154
stc單片機介紹 瀏覽:901
如何解壓失戀的人 瀏覽:493
安卓微信滯後怎麼辦 瀏覽:942
手機編程跟電腦編程一樣嗎 瀏覽:624
android代碼規範文檔 瀏覽:99
word如何加密批註 瀏覽:327