導航:首頁 > 源碼編譯 > 演算法問題

演算法問題

發布時間:2022-01-23 05:51:00

A. 有關演算法的問題

您好,您問答這個問題很好,很有意義。
您的這個問題與電腦的計算過程有關,和編程語言也有關。A與C,是兩個大數,B相對來說就很小。按您的計算結果,情況應該是這樣:編程語言編譯時是從左到右對計算進行編譯(部分編譯器會反方向進行),此時,A和C會被識別為浮點型,B識別為整型(不知道您是什麼編譯器,什麼語言,這里假設是弱類型的語言),那麼運算時,A先與B運算,就是一個浮點型與一個整型運算,自動類型轉換會轉換C為浮點型(在運算中,較低「等級」的類型與較高「等級」的類型運算時,會自動類型轉換),此時相當於一個大數與一個接近0的數相加,根據IEEE標准,浮點數是由符號位S、階碼E和尾數M組成,其中能夠決定精度的尾數M在單精度浮點數裡面,僅有23位,那麼在A與B相加後,可以「認為」A+B=A,因為這個「小數」1,在產生的結果中「不存在」,因為這個A的尾數的最低一位表示的值都比1大。
這樣,A+B+C就是0,而先算浮點數的演算法卻不同,因為A+C算完了,其結果大約是絕對值小於1e-6的一個數(也就是說,對於浮點數,不存在真正意義上的0的說法,浮點數裡面,認為小於1e-6的數,就是0),此時在與1相加,提升為浮點型後,這個小於1e-6的尾數在新的浮點數裡面也就「不存在」了,與上邊所說的A+B「相當於」沒加是一個道理。

您問的這個問題,是編程與科學計算中一個基本問題,就是計算方法裡面的精度問題。在用計算機處理數據時,此類問題處理不好,會對計算結果產生關鍵影響。更詳細的細節建議網路相關內容進行學習。
參考:http://ke..com/link?url=-eAbFbjw_t_HG9vjrxEN5q

B. 有關演算法問題

分治法的基本思想是將一個規模為n的問題分解為k個規模較小的子問題,這些子問題相互獨立且與原問題相同。遞歸的解這些子問題,然後將個子問題的解合並得到原問題的解。
分治法的基本步驟:
divide-and-conquer(P)
{
if ( | P | <= n0) adhoc(P); //解決小規模的問題
divide P into smaller subinstances P1,P2,...,Pk;//分解問題
for (i=1,i<=k,i++)
yi=divide-and-conquer(Pi); //遞歸的解各子問題
return merge(y1,...,yk); //將各子問題的解合並為原問題的解
}
#include <stdio.h>

//--------------------------------------------------------
// 列印搬運動作
//--------------------------------------------------------
int MoveIt(int x,int Source,int Target)
{
printf("Move %d From %d to %d\n",x,Source,Target);
return 0;
}

//--------------------------------------------------------
// 用 4 根柱子移動盤子
// n 是盤子個數,編號從1 到 n
// First 是源柱子號
// Second Third 是兩根過渡柱
// Fourth 是目標柱
//--------------------------------------------------------
int MoveHanoi(int n,int First,int Second,int Third,int Fourth)
{
if (n<1) return 0; // 如果沒有盤子就返回
if (n==1) // 如果只有一個盤子
{
MoveIt(n,First,Fourth); // 就直接從源柱子移到目標柱子上
return 0;
}
if (n==2) // 如果有兩個盤子
{
MoveIt(n-1,First,Second); // 把上面的那片移到一個過渡柱上
MoveIt(n,First,Fourth); // 把下面的那片移到目標柱上
MoveIt(n-1,Second,Fourth); // 再把第 1 片從過渡柱移到目標柱上
return 0;
}
if (n==3) // 如果有 3 片盤子
{
MoveIt(n-2,First,Second); // 把最小的盤子移到一個過渡柱上
MoveIt(n-1,First,Third); // 把中間盤子移到另一過渡柱上
MoveIt(n,First,Fourth); // 把最大的盤子移到目標柱上
MoveIt(n-1,Third,Fourth); // 把中間盤子移到目標柱上
MoveIt(n-2,Second,Fourth); // 把最小的盤子移到目標柱上
return 0;
}
// 遞歸地把上面 n-2 盤子移到一個過渡柱上
// 留下最大的兩個盤子
MoveHanoi(n-2,First,Third,Fourth,Second);
MoveIt(n-1,First,Third); // 把倒數第 2 個盤子移到另一個過渡柱上
MoveIt(n,First,Fourth); // 把最底下的盤子移到目標柱上
MoveIt(n-1,Third,Fourth); // 把倒數第 2 個盤子移到目標柱上
// 遞歸地把 n-2 個盤子從過渡柱上移到目標柱上
MoveHanoi(n-2,Second,First,Third,Fourth);
return 0;
}

int main()
{
MoveHanoi(4,1,2,3,4);
return 0;
}

C. hannoi演算法問題

可以用遞歸的方式。
假設有3跟柱子A,B,C,需要把A柱子上的n個盤子全部搬到C柱子上。
分三步走:1.把n-1個盤子搬到B柱子上,2.把第n個盤子搬到C柱子上,3.把B柱子上的n-1個盤子搬到C柱子上。
函數可以這樣:
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);
}
}

D. 演算法的問題

著不是很簡單的一段C語言嘛,循環三次,每次循環過程中,要求出入一個字元,循環完成後,然後退出運行。。。。

你追問哪個是輸出輸入輸出字元串的,那個#include<math.h>沒必要包含,你知道這些庫文件的作用嗎??

E. 求助演算法問題

留個腳印..
沒看清題..-.-不用截...
先對S排序
對於S的元素a0,a1,a2...an進行查詢
取x=a0,y=an,
如果x+y>z,y=a(n-1),
如果x+y<z,x=a1.
即從兩邊向中間查詢
如此直到兩數和為z(結果),或者讀取的兩個數相等(無結果).

F. 計算機演算法問題

這個最短平均排隊時常其實就是要求大家等待的時間越短越好。從題目上看好像只有一個人來服務這n個人,所以如果希望大家等待的時間短的話,就應該將服務時間最長的人拍在最後,然後將服務時長第二長的排在倒數第二位...
如果要做演算法就可以將服務時長作為權重,權重越大就排隊越靠後。

G. C語言演算法問題

這不是所有演算法都必須的,是它這種演算法的邏輯需要——當n是素數時一旦i*i>=n,就到i<n的判斷處了,由於i<n,所以認為n是素數並輸出,進入n+1判斷下一個數是不是素數;但如果n不是素數,那麼前面設置了一個i=n作記號,這時返回去i*i>=n了,也要跳到i<n的判斷處,但這時由於i==n而不認為n是素數就不輸出且直接進入n+1判斷下一個數……所以你完全可以設計一個演算法不要i<n的判斷。這里只是為了與前面檢測出n不是素數後設置的i=n這個記號相呼應的邏輯需要!

H. 一個演算法問題

整個程序其實就是個求和
可以改寫為
s=0;
for(l=1;l<=100;l++){
s=s+l^2;
}
system.out.println(s);
整個程序其實是求 1^2 +2^2 +3^2 +...+100^2 ,即 1 到 100 的平方和

I. 關於計算機演算法問題

是這樣 把思路轉化為演算法 然後化為程序語言(有各種的程序語言) 然後用特定的編譯器執行語言 最後就是你看到的了

閱讀全文

與演算法問題相關的資料

熱點內容
PDF梗 瀏覽:796
怎麼去加密oppo 瀏覽:787
如何編譯pjsip 瀏覽:217
有沒有正規的加密軟體 瀏覽:181
怎麼才能使安卓手機不卡頓 瀏覽:589
阿里伺服器如何使用教程 瀏覽:397
怎麼防止微信加密 瀏覽:795
網路連接不上顯示加密是怎麼回事 瀏覽:331
25歲做程序員好嗎 瀏覽:505
程序員稱呼it 瀏覽:692
單片機的控制寄存器 瀏覽:977
sp在單片機 瀏覽:884
主力資金紅綠指標源碼 瀏覽:464
一般手機的伺服器地址 瀏覽:493
凱迪拉克atsl安全防盜系統未編程 瀏覽:257
伺服器上怎麼安裝net35 瀏覽:37
安卓這個字念什麼 瀏覽:500
eclipse安裝android插件 瀏覽:954
iPhone12所有配件都加密 瀏覽:63
陳修園pdf 瀏覽:1000