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的矩阵,找出最大的数放在矩阵中间,左上角,右上角,左下角。右下角,分别放第二第三第四大的数。。。
未完待续…