c語言編寫最大公約數最小公倍數,c語言最大公倍數和最小公約數

本文目錄一覽:

c語言函數調用求最大公約數和最小公倍數

#includelt;stdio.hgt;

int a;

int _Y(int x,int y);

int main()

{

int a,b,c,d;

printf(「請輸入數字:」);

scanf(“%d,%d”,c,d);//此處注意在輸出的時候數字之間要打都好,不然輸出結果錯誤

b=_Y(c,d);

a=c*d/b;

printf(「最大公約數為:%d\n」,b);

printf(「最小公倍數為:%d\n」,a);

return 0;

}

int _Y(int x,int y)

{

int e;

if(xlt;y)

{

e=x;

x=y;

y=e;

}

while((e=x%y)!=0)

{

x=y;

y=e;

}

return(y);

}

擴展資料:

while循環開始後,先判斷條件是否滿足,如果滿足就執行循環體內的語句,執行完畢後再回來判斷條件是否滿足,如此無限重複;直到條件不滿足時,執行while循環後邊的語句。簡單來講就是說while循環是先判斷後循環, 判斷如果滿足條件進入循環 本次循環後再次判斷 。

舉個例子:

do-while循環與while循環的不同在於:它先執行循環中的語句,然後再判斷表達式是否為真, 如果為真則繼續循環;如果為假, 則終止循環。因此, do-while循環至少要執行一次循環語句。 簡單來講就是說while循環是先循環後判斷 。

舉個例子:

總結:while循環是先判斷後循環 ,而do–while循環是先循環後判斷。

參考資料:

百度百科——while(循環語句及英文單詞)

c語言編程,求兩個數的最大公約數和最小公倍數

這樣寫:

#include

void

main()

{

int

m,n,i,r,temp;

printf(“請輸入第一個數的值:

“);

scanf(“%d”,m);

printf(“請輸入第二個數的值:

“);

scanf(“%d”,n);

if(nm)

{

temp=m;

m=n;

n=temp;

}

i=n;

while(i%m!=0)

{

i=i+n;

}

printf(“最小公倍數是:%d

\n”,i);

r=m%n;

while(r!=0)

{

m=n;

n=r;

r=m%n;

}

printf(“最大公約數是:%d

\n”,n);

}

圖:

c語言求最大公約數和最小公倍數

c語言求最大公約數和最小公倍數,回答如下:

在做C語言相關練習的時候,會遇見比較經典的一道題型,就是求最大公約數或者最小公倍數。那麼先普及一下什麼是最大公約數和最大公倍數:

最大公約數:指能夠整除多個整數的最大正整數。例如8和12的最大公約數為4。

最小公倍數:兩個或多個整數最小的公共倍數。例如6和24的最小公倍數為24。

1.暴力求解

以求最大公約數為例,若求 a b 的最大公約數,所求的數最大不會超過兩個數中較小的數。那可以從這個較小的數開始被a b同時試除,如果試除的餘數為0,那麼該數即為所求。如果不滿足餘數同時為零的條件,那麼該數減一,接著試除,直到滿足餘數同時為零的條件為止。

2.輾轉相除法

輾轉相除法是用來求最大公約數的,同時最小公倍數滿足這樣一條數學性質:兩數之積除以最大公約數即為最小公倍數.所以用輾轉相除法是可以間接求最小公倍數的。

輾轉相除法的大概思路:用兩數相除,如果餘數為零即為所求,如果餘數不為零,上一輪相除所得的餘數為除數,同時上一輪的除數現在成為被除數,直到餘數為零不再相除,此時的除數即為所求。

c語言如何求最小公倍數和最大公約數

解題步驟:

1、求最大公約數

對兩個正整數a,b如果能在區間[a,0]或[b,0]內能找到一個整數temp能同時被a和b所整除,則temp即為最大公約數。

2、求最小公倍數

對兩個正整數a,b,如果若干個a之和或b之和能被b所整除或能被a所整除,則該和數即為所求的最小公倍數。

//窮舉法求兩數的最大公約數

int divisor(int a,int b)

{

int temp;//定義義整型變數

temp=(agt;b)?b:a;//採種條件運算表達式求出兩個數中的最小值

while(tempgt;0){

if(a%temp==0b%temp==0)//只要找到一個數能同時被a,b所整除,則中止循環

break;

temp–;//如不滿足if條件則變數自減,直到能被a,b所整除

}

return temp;//返回滿足條件的數到主調函數處

}

//窮舉法求兩數的最小公倍數

int multiple(int a,int b)

{

int p,q,temp;

p=(agt;b)?a:b;//求兩個數中的最大值

q=(agt;b)?b:a;//求兩個數中的最小值

temp=p;//最大值賦給p為變數自增作準備

while(1){//利用循環語句來求滿足條件的數值

if(p%q==0)

break;//只要找到變數的和數能被a或b所整除,則中止循環

p+=temp;//如果條件不滿足則變數自身相加

}

return p;

}

擴展資料:

用窮舉法解題時,就是按照某種方式列舉問題答案的過程。針對問題的數據類型而言,常用的列舉方法一有如下三種:

(1)順序列舉是指答案範圍內的各種情況很容易與自然數對應甚至就是自然數,可以按自然數的變化順序去列舉。

(2)排列列舉有時答案的數據形式是一組數的排列,列舉出所有答案所在範圍內的排列,為排列列舉。

(3)組合列舉當答案的數據形式為一些元素的組合時,往往需要用組合列舉。組合是無序的。

例子如下:在公元五世紀我國數學家張丘建在其《算經》一書中提出了「百雞問題」:

「雞翁一值錢5,雞母一值錢3,雞雛三值錢1。百錢買百雞,問雞翁、母、雛各幾何?」這個數學問題的數學方程可列出如下:

Cock+Hen+Chick=100

Cock*5+Hen*3+Chick/3=100

顯然這是個不定方程,適用於窮舉法求解。依次取Cock值域中的一個值,然後求其他兩個數,滿足條件就是解。

該問題的C語言程序演算法如下:

int Cock,Hen,Chick;/*定義公雞,母雞,雞雛三個變數*/

Cock=0;

while(Cocklt;=19)/*公雞最多不可能大於19*/

{Hen=0;

whlie(Henlt;=33)/*母雞最多不可能大於33*/

{Chick=100-Cock-Hen;

if(Cock*15+Hen*9+Chick==300)/*為了方便,將數量放大三倍比較*/

printf(“\n公雞=%d\n母雞=%d\n雛雞=%d”,Cock,Hen,Chick);

Hen=Hen+1;

}

Cock=Cock+1;

}

參考資料:

百度百科——窮舉法

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/183581.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-25 05:47
下一篇 2024-11-25 05:47

相關推薦

發表回復

登錄後才能評論