接上篇博客——C语言编程笔试题(一)
文章目录
一、求最小公倍数
题目描述:
正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数。
输入描述:
输出A和B的最小公倍数。
示例:
输入:
5 7
输出:
35
思想步骤
1.方法一
在做最小公倍数的题目之前,我们先了解一下最大公约数。
如何求解两数的最大公约数?
我们可以利用辗转相除法进行计算。
辗转相除法:
好的,我们可以根据上图的思考过程和百度百科的介绍了解,知道了求最大公约数的过程。
思路:
1.先求出最大公约数 q
2.计算出最小公倍数 p
实现代码
#include <stdio.h>int main(){int a = 0;int b = 0;int c = 0;scanf("%d", &a);scanf("%d", &b);int m = a;int n = b;int tmp = 0; //a存放较大的值if (a < b){ tmp = a; a = b; b = tmp;}while (a%b != 0){ c = a%b; a = b; b = c;}if (a%b == 0){ c = b;}printf("%d\n",(m*n)/c);return 0;}
2.方法二
i从i=a开始每次加1,直到 i%a=0 && i%b=0,此时i为最小公倍数。
实现代码
#include <stdio.h>int main(){int a = 0;int b = 0;scanf_s("%d%d", &a, &b);int tmp = 0;//a存放较大的值if (a < b){ tmp = a; a = b; b = tmp;}int i = 0;for (i = a; i>0; i++){if (i%a == 0 && i%b == 0){break;}}printf("%d\n", i);return 0;}
二.找单身狗
题目标题:
找单身狗
题目描述
一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。
编写一个函数找出这两个只出现一次的数字。
思考步骤
1.将只出现一次的两个数字找出来
2.按照二进制位的规律将 这两个“单身狗”分别分进新的数组中
3.根据位操作符的用法将两组中的两只单身狗找出
实现代码
int main(){int arr[] = { 1, 2, 3, 4, 5, 6, 4, 3, 2, 1 };int sz = sizeof(arr) / sizeof(arr[0]);int i = 0;int num = 0;for (i = 0; i < sz; i++){ num ^= arr[i];}//我们得到了只出现了一次的两个数字的按位异或的结果。//根据异或的结果,我们得到这两个数字在二进制第几位开始不同//记录下异或结果中1第一次出现的位置pos,将原数组中的数字根据二进制第pos位是1/0进行分组。int pos = 0;for (i = 0; i < sz; i++){if ((num >> i) == 1) pos = i;}//我们根据这一点,将这两个数字分在两个新的数组中int n1 = 0;int n2 = 0;//我们将二进制位中第pos位是0的数字分成新的一组for (i = 0; i < sz; i++){if (((arr[i] >> pos) & 1) == 0) n1 ^= arr[i]; //新数组中的数字全部异或得到那个只出现一次的数字}//我们将二进制位中第pos位是1的数字分成新的一组for (i = 0; i < sz; i++){if (((arr[i] >> pos) & 1) == 1) n2 ^= arr[i]; //新数组中的数字全部异或得到那个只出现一次的数字}printf("%d %d\n", n1, n2);return 0;}
切记:要牢记C语言中位操作符的使用!!
今天的题目就分享到这里,谢谢大家的欣赏与关注!!!