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>b
m=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,b
c=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的矩陣,找出最大的數放在矩陣中間,左上角,右上角,左下角。右下角,分別放第二第三第四大的數。。。
未完待續…