1.編寫程序實現求兩個整數最大公約數和最小公倍數.
方法一:輾轉相除法
算法思路:兩個整數a,b,其中a>b,求其最大公約數和最小公倍數
步驟① a%b=c,其中c為余數
步驟② 若余數c為0,即a可以把b給整除,也就是說這里的b就是其最大公約數;然后給,再通過a×b=最大公約數×最小公倍數,求得其最小公倍數即可
步驟③ 若余數c不為0,此時需要將a=b;b=c;然后再執行步驟②即可
例如:求 15和50的最大公約數和最小公倍數
首先,比較找出最大的數賦值給a,即a=50,b=15;
接著,求余數c的值,即 50%15=5 此時的余數c為5,不為0
即將a=b;b=c; <===> a=15,b=5;
接著,求余數c的值,即15%5=0 此時余數c為0,結束,此時5就是其最大公約數,50×15/5就為最小公倍數
代碼如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{int a,b,m,n,c;scanf("%d %d",&a,&b);//輸入兩個數,由題意可知,a>bm=a;n=b;while(b!=0)//這里的b為除數{c=a%b;//這里的c為余數a=b;b=c;}printf("最大公約數為:%d\n",a);printf("最小公倍數為:%d\n",m*n/a);return 0;
}
方法二:相減法
算法思路:兩個數來回相減,大數減小數,直到兩數相減結果為0為止.
例如,求16和5的最大公約數和最小公倍數
若a>b,即 a=a-b
反之,b=b-a
一直相減,直到a和b的值相等為止,即a-b==0為止
代碼如下:
#include< stdio.h>
int main()
{int n,a,b,c; scanf("%d",&n) ; //定義n,為了控制n組數據循環while(n--){scanf("%d %d",&a,&b); //輸入a,bc=a* b; //c為a*b的值while(a!=b) //當a==b時結束{if(a>b) //如果a>b,則a=a-b{a=a-b;}else //否則b>a,b=b-a{b=b-a;}}printf("%d %d\n",a,c/a); //由于最大公約數*最小公倍數=兩數相乘} //所以,a為最大公約數,c/a為最大公倍數return 0;
}
2.假設一個小球從200米高的空中落下,每次反彈一半高度,求第5次落下小球經過的路徑是多少?求第八次反彈高度是多少?
解題思路:小球從200m高下落,第一次下落,會反彈到100m處,即
3.求XX年XX月XX日到該年(即同一年)XX年XX日 相差多天?(同一天算一天,考慮瑞年問題)
4.求子串husdstring在母串sdfstring中出現的次數?
5.編寫程序實現,輸入一組數據,用冒泡法進行排序(編寫一個函數實現),在主函數中輸入輸出。**需要用指針實現
6.輸入一組字符實現倒序輸出(用遞歸函數實現),輸出結果保存到“out。txt”中。。。
7.編寫程序,建立一動態鏈表,中包含學生學號,姓名,年齡,輸入一個學生學號刪除相對應的結點。。
8。有一5×5的矩陣,找出最大的數放在矩陣中間,左上角,右上角,左下角。右下角,分別放第二第三第四大的數。。。
未完待續…