你要求的應該是兩個數的最小公倍數吧,要是它們的公倍數的話,有無窮多個
1.
#include<stdio.h>
main()
{
int m,n,p;
scanf("%d,%d",&m,&n);
p = m*n;
while(n!=0) //求出它們的最大公約數
{
int r=m%n;
m=n;
n=r;
}
printf("MINGongBeiShu:%d\n",p/m); //最小公倍數=這兩個數的乘積÷它們的最大公約數
}
其實不必要想上位元兄那樣去理會它們的大小,這演算法與它們的大小順序是無關的,你可以上機運行一下,結果是對的,你可以舉例子來分析一下,這對你的學習有很大的幫助!
2.
#include<stdio.h>
main()
{
int max,min,i;
int arr[10]; //定義數組,存儲輸入的那十個數
for(i=0;i<10;i++)
{
scanf("%d",arr[i]);
}
max=min=arr[0];
for(i=1;i<10;i++)
{
if(max<arr[i])
max=arr[i];
else if(min>arr[i])
min = arr[i];
else
continue;
}
printf("max = %d;\tmin = %d\n",max.min);
}
你上機運行一下,好像上一位的回答有錯誤!!
❷ 學數據結構的時候,那些演算法設計可以上機實操出結果的嗎
演算法設計當然可以在上機出結果的
先學C語言,看數據結構的演算法設計當然會方便很便(不過也看這個演算法設計是用什麼語言寫的呀)
❸ 關於演算法是時間復雜度,對數階比指數階效率高嗎
時間復雜度
(1)時間頻度
一個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機運行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且一個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數多,它花費時間就多。一個演算法中的語句執行次數稱為語句頻度或時間頻度。記為T(n)。演算法的時間復雜度是指執行演算法所需要的計算工作量。
(2)時間復雜度
在剛才提到的時間頻度中,n稱為問題的規模,當n不斷變化時,時間頻度T(n)也會不斷變化。但有時我們想知道它變化時呈現什麼規律。為此,我們引入時間復雜度概念。
一般情況下,演算法中基本操作重復執行的次數是問題規模n的某個函數,用T(n)表示,若有某個輔助函數f(n),使得當n趨近於無窮大時,T(n)/f(n)的極限值為不等於零的常數,則稱f(n)是T(n)的同數量級函數。記作T(n)=O(f(n)),稱O(f(n)) 為演算法的漸進時間復雜度,簡稱時間復雜度。
在各種不同演算法中,若演算法中語句執行次數為一個常數,則時間復雜度為O(1),另外,在時間頻度不相同時,時間復雜度有可能相同,如T(n)=n^2 3n 4與T(n)=4n^2 2n 1它們的頻度不同,但時間復雜度相同,都為O(n^2)。
按數量級遞增排列,常見的時間復雜度有:
常數階O(1),對數階O(log2n)(以2為底n的對數,下同),線性階O(n),
線性對數階O(nlog2n),平方階O(n^2),立方階O(n^3),...,
k次方階O(n^k),指數階O(2^n)。隨著問題規模n的不斷增大,上述時間復雜度不斷增大,演算法的執行效率越低。
演算法的時間性能分析
(1)演算法耗費的時間和語句頻度
一個演算法所耗費的時間=演算法中每條語句的執行時間之和
每條語句的執行時間=語句的執行次數(即頻度(Frequency Count))×語句執行一次所需時間
演算法轉換為程序後,每條語句執行一次所需的時間取決於機器的指令性能、速度以及編譯所產生的代碼質量等難以確定的因素。
若要獨立於機器的軟、硬體系統來分析演算法的時間耗費,則設每條語句執行一次所需的時間均是單位時間,一個演算法的時間耗費就是該演算法中所有語句的頻度之和。
求兩個n階方陣的乘積 C=A×B,其演算法如下:
# define n 100 // n 可根據需要定義,這里假定為100
void MatrixMultiply(int A[a],int B [n][n],int C[n][n])
{ //右邊列為各語句的頻度
int i ,j ,k;
(1) for(i=0; i
❹ 何為c++演算法的時間性能
你問的時間性能應該是指時間復雜度
一個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機運行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且一個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數多,它花費時間就多。一個演算法中的語句執行次數稱為語句頻度或時間頻度。記為T(n)。
按數量級遞增排列,常見的時間復雜度有:
常數階O(1),對數階O(log2n),線性階O(n),
線性對數階O(nlog2n),平方階O(n^2),立方階O(n^3),...,
k次方階O(n^k), 指數階O(2^n) 。隨著問題規模n的不斷增大,上述時間復雜度不斷增大,演算法的執行效率越低。
❺ 數據結構的演算法例子如何上機去驗證
你好,對於數據結構初學者來說,一般都會覺得上機驗證演算法比較困難。因為大家有個共同的誤區,認為書上的演算法直接可以編譯運行。
實際上,數據結構給的演算法例子,很多是偽代碼,是需要修改為實際可執行的代碼才能編譯通過並運行的。如果修改成語法上,邏輯上正確的,可編譯運行的代碼,就要考驗你的編程功底了,而這一點就是初學者體會到的難點。
希望對你有幫助~
❻ 用類c語言描寫的演算法能直接在計算機上運行嗎
要看是否符合語法規則啊。如果嚴格符合語法規則,當然可以直接運行。
❼ 如何使演算法在計算機上運行
演算法只是一種編程的思想。要把你演算法的功能表現出來還需要使用工具:
運行環境
編程語言
對應的編譯器
用編程語言翻譯你的演算法成編譯器可以認得的語言
用編譯器編譯,也就是翻譯成可以讓運行環境可以認得的語言。
一般運行環境可以認得的語言就是機器語言。比如用vc編寫的代碼,編譯出程序。
但有些時候不是的,比如用java語言寫的代碼,java編譯器編譯出的程序是不能直接給機器運行的,而是給java 虛擬機去解釋成機器語言然後給機器執行
❽ 演算法在什麼東西上運行
演算法是抽象的東西。簡單說是計算機解決問題的方法。
演算法不能運行,只能通過程序代碼來實現、體現。
至於程序代碼,在編輯器中編輯完成後,要經過編譯器的編譯,生產應用程序(exe文件)然後運行計算結果
演算法每種編程語言都有,而每種編程語言都有不同的編譯器。至於你用哪種就不得而知了。
❾ 關於演算法時間復雜度分析的疑問
誰跟你說的分析時間復雜度是用比較次數來衡量的?
一個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機運行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且一個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數多,它花費時間就多。一個演算法中的語句執行次數稱為語句頻度或時間頻度。記為T(n)。
一般情況下,演算法的基本操作重復執行的次數是模塊n的某一個函數f(n),因此,演算法的時間復雜度記做:T(n)=O(f(n))
分析:隨著模塊n的增大,演算法執行的時間的增長率和f(n)的增長率成正比,所以f(n)越小,演算法的時間復雜度越低,演算法的效率越高。
在計算時間復雜度的時候,先找出演算法的基本操作,然後根據相應的各語句確定它的執行次數,再找出T(n)的同數量級(它的同數量級有以下:1,Log2n ,n ,nLog2n ,n的平方,n的三次方,2的n次方,n!),找出後,f(n)=該數量級,若T(n)/f(n)求極限可得到一常數c,則時間復雜度T(n)=O(f(n))
一般情況時間復雜度是以你演算法中最復雜的那個循環來看的,
比如有個
for(i = 0;i < n;i ++)
{
for(j = 0;j < n;j ++)
{
...
}
}
後面不管他有多少個單獨的
for(i = 0;i < n;i ++)
{
...
}
他的時間復雜度都是O(n2)
不會是O(n2) + O(n) + O(n) + O(2n)...這樣的
❿ 用c語言描述的演算法可以直接在計算機上運行嗎
不可以
必須通過編譯器編譯成計算機語言才能運行