點成雙根演算法
1. 試寫一個建立二叉樹在內存的雙鏈表示演算法,並實現先根、中根、後根以及層序遍歷演算法。
你先把三元組化為鏈表,然後按下述演算法:
/*二叉樹的建立、遞歸遍歷sy6_1.c*/
#include <stdio.h>
#include <alloc.h>
#include <stdlib.h>
#define MAXSIZE 30
typedef struct btnode
{
char c;
struct btnode *l,*r;
}BTNode;
BTNode *Create_BiTree()/*二叉樹的建立*/
{/*用輔助數組建立二叉樹*/
int i,j;
char ch;
BTNode *s,*t,*p[MAXSIZE];
printf("輸入頂點編號及信息,輸入0和#結束:i,ch");
scanf("%d,%c",&i,&ch);
while(i!=0 &&ch!='#')/*建立二叉樹的存儲結構*/
{s=(BTNode*)malloc(sizeof(BTNode));
s->c=ch;
s->l=s->r=NULL;
p[i]=s;
if(i==1) t=s;/*判斷輸入結點是根結點、左孩子還是右孩子*/
else
{j=i/2;
if(i%2==0) p[j]->l=s;
else p[j]->r=s;
}
printf("輸入頂點編號及信息,輸入0和#結束:i,ch");
scanf("%d,%c",&i,&ch);
}
return t;
}/* Create_BiTree1*/
void DLR(BTNode *bt)
{/*前序遞歸遍歷*/
if(bt)
{
printf("%c",bt->c);
DLR(bt->l);
DLR(bt->r);
}
}/* DLR*/
void LDR(BTNode *bt)
{/*中序遞歸遍歷*/
if(bt)
{
LDR(bt->l);
printf("%c",bt->c);
LDR(bt->r);
}
}/* LDR*/
void LRD(BTNode *bt)
{/*後序遞歸遍歷*/
if(bt)
{
LRD(bt->l);
LRD(bt->r);
printf("%c",bt->c);
}
}/* LRD*/
void LevelOrder(BTNode *bt) /*層次遍歷二叉樹bt*/
{ BTNode* queue[MAXSIZE];
int front,rear;
if (bt==NULL) return;
front=0; /*非循環隊列*/
rear=0;
queue[rear++]=bt;
while(front!=rear)
{printf("%c",queue[front]->c); /*訪問隊首結點的數據域*/
if (queue[front]->l!=NULL) /*隊首結點左孩子指針入隊*/
{ queue[rear]=queue[front]->l;rear++;}
if (queue[front]->r!=NULL) /*隊首結點右孩子指針入隊*/
{ queue[rear]=queue[front]->r; rear++; }
front++;
}
}
void main()
{
int i,j=1;
BTNode *t;
t=Create_BiTree();
while(j)
{
printf("\n"); /*功能菜單*/
printf("請選擇操作:\n");
printf("1: 二叉樹的前序遍歷\n");
printf("2: 二叉樹的中序遍歷\n");
printf("3: 二叉樹的後序遍歷\n");
printf("4: 二叉樹的層次遍歷\n");
printf("0: 退出程序\n");
scanf("%d",&j);
switch(j)
{
case 0: printf(" 程序退出!\n ");exit(0);
case 1: printf("前序遍歷結果:\n"); DLR(t); break;
case 2: printf("中序遍歷結果:\n"); LDR(t);break;
case 3: printf("後序遍歷結果:\n"); LRD(t);break;
case 4: printf("按層遍歷結果:\n");LevelOrder(t);break;
default : printf("\n輸入無效,請重新選擇操作!\n" );break;
}
}
}
2. 解析幾何用點成雙根演算法有沒有分
有分的,只要回答了至少都有一兩分,祝考試成功,加油,同學!
解析幾何(Analytic geometry),又稱為坐標幾何(Coordinate geometry)或卡氏幾何(Cartesian geometry),早先被叫作笛卡兒幾何,是一種藉助於解析式進行圖形研究的幾何學分支。解析幾何通常使用二維的平面直角坐標系研究直線、圓、圓錐曲線、擺線、星型線等各種一般平面曲線,使用三維的空間直角坐標系來研究平面、球等各種一般空間曲面,同時研究它們的方程,並定義一些圖形的概念和參數。
3. 圓錐曲線雙根點乘法是怎麼回事,之前在樂學高考裡面看到圓錐曲線里有一種叫雙根點乘法。B站和百度可以搜
x1.x2=c/a
x1+x2=-b/a
這個是韋達定理.
4. 根號下的演算法
根號下(1.46*0.58)*(3.46*2.58)
=根號下(0.8468)*(8.9268)
=根號下7.55921424
=2.......
5. 根號的演算法啊
我「定義」a^b=a的b次方。
(10a+b)^2
=
100a^2+20ab+b^2
=
100a^2+b(20a+b)
a代表的是已經計算出來的結果,b代表的是當前需要計算的位上的數。在每次計算過程中,100a^2都被減掉,剩下b(20a+b)。然後需要做的就是找到最大的整數b'使b'(20a+b')<=b(20a+b)。
因此,我就照著書里的方法,推導開立方筆演算法。
(10a+b)^3
=
1000a^3+300a^2*b+30a*b^2+b^3
=
1000a^3+b[300a^2+b(30a+b)]
如果每次計算後都能減掉1000a^3的話,那麼剩下的任務就是找到最大的整數b',使b'[300a^2+b'(30a+b')]<=b[300a^2+b(30a+b)]。
於是,我就設計了一個版式。下面就開始使用這個版式來檢驗開立方筆演算法。
例如:147^3=3176523
一開始,如下圖所示,將3176523從個位開始3位3位分開。(3'176'523)
第一步,我們知道,1^3
<
3
<
2^3,所以,第一位應該填1。
1^3
=
1,3
-
1
=
2,餘2,再拖三位,一共是2176。
接下來這一步就比較復雜了。因為我水平有限,我現在還不能把它改造得比較好。
依照「b[300a^2+b(30a+b)]」,所以:
1^2*300=300,1*30=30,如圖上所寫。
第二位就填4,所以上圖3個空位都填4。
然後(34*4+300)*4=1744,2176-1744=432,再拖三位得432523。
然後就照上面一樣,
14^2*300=58800,14*30=420,如上圖所寫。
第三位就填7,所以上圖下邊3個空位都填7。
然後(427*7+58800)*7=432523,432523-432523=0,到此開立方結束。
在我以後的一些實踐中,發現越往後開,300*a^2與b(30a+b)的差距就越大,尋找b的工作就越容易,因為結果中有一項是300*a^2*b。
徒手開n次方根的方法:
原理:設被開方數為X,開n次方,設前一步的根的結果為a,現在要試根的下一位,設為b,
則有:(10*a+b)^n-(10*a)^n<=c(前一步的差與本段合成);且b取最大值
用純文字描述比較困難,下面用實例說明:
我們求
2301781.9823406
的5次方根:
第1步:將被開方的數以小數點為中心,向兩邊每隔n位分段(下面用'表示);不足部分在兩端用0補齊;
23'01781.98234'06000'00000'00000'..........
從高位段向低位段逐段做如下工作:
初值a=0,差c=23(最高段)
第2步:找b,條件:(10*a+b)^n-(10*a)^n<=c,即b^5<=23,且為最大值;顯然b=1
差c=23-b^5=22,與下一段合成,
c=c*10^n+下一段=22*10^5+01781=2201781
第3步:a=1(計算機語言賦值語句寫作a=10*a+b),找下一個b,
條件:(10*a+b)^n-(10*a)^n<=c,即:(10+b)^5-10^5<=2201781,
b取最大值8,差c=412213,與下一段合成,
c=c*10^5+下一段=412213*10^5+98234=41221398234
第4步:a=18,找下一個b,
條件:(10*a+b)^n-(10*a)^n<=c,即:(180+b)^5-180^5<=41221398234,
b取最大值7
說明:這里可使用近似公式估算b的值:
當10*a>>b時,(10*a+b)^n-(10*a)^n≈n*(10*a)^(n-1)*b,即:
b≈41221398234/n/(10*a)^(n-1)=41221398234/5/180^4≈7.85,取b=7
以下各步都更加可以使用此近似公式估算b之值
差c=1508808527;與下一段合成,
c=c*10^5+下一段=1508808527*10^5+06000=150880852706000
第5步:a=187,找下一個b,
條件:(10*a+b)^n-(10*a)^n<=c,即:
(1870+b)^5-1870^5<=150880852706000,
b取最大值2,差c=28335908584368;與下一段合成,
c=c*10^5+下一段=2833590858436800000
第6步:a=1872,找下一個b,
條件:(10*a+b)^n-(10*a)^n<=c,即:
(18720+b)^5-18720^5<=2833590858436800000,
b取最大值4,差c=376399557145381376;與下一段合成,
c=c*10^5+下一段=37639955714538137600000
.............................
最後結果為:18.724......
6. 雙根公式怎麼使用
∵y軸交於(0,4)
∴c=4
∵過(-3,0),(1,0)
∴-3*1=c/a=4/a -3+1=-b/a
∴a=-4/3 b=-8/3
∴y=(-4/3)x²-(8/3)x+4
7. 根號的演算法
這個問題一言難盡。現在中學已不教開平方了,因為計算器已普及,改教用計算器開平方了。如果你想學開方,華羅庚先生的高等數學教程第一卷上有。
8. 根號2的計算方法
可以使用除法來計算的,不過方法比較繁瑣
第一步:整數部分,直接開方,算出最接近數字,可以得到余數
第二步:計算開方的小數部分了,這是最繁瑣的部分,比較麻煩
首先余數部分直接擴大一百倍,除數部分直接乘以20倍,再加上另一個除數
過程如下:
整數部分
後面的部分可以繼續計算下去的,越到後面計算的難度越大,前面的文字解釋部分可能不太清楚,請大家原諒,可以看看計算的部分,自己找找規律的