1 求两个数的最小公倍数
目前我能想到的方法有两种
第一种方法
输入完两个数值后,先判断出二者中的较大者,因为是最小公倍数,它的特殊情况是正好较大者即为最小公倍数,所以我们可以让变量从较大者开始进行是否是最小公倍数的判断(变量可以整除这两个数),若满足该条件就break跳出循环并记录变量
第二种方法(辗转相除法)
在学习过程中了解到的一种新的高效的方法
#include<stdio.h>
int main()
{
int a = 0, b = 0;
int x = 0, y = 0;
int t = 0;
scanf("%d%d", &a, &b);
int m = a, n = b;
if (a > b)
{
do
{
t = (a % b);
x = b;
b = t;
} while (b != 0);
}
else if (a < b)
{
do
{
t = (b % a);
x = a;
a = t;
} while (a != 0);
}
printf("%d %d", x, m * n / x);
return 0;
}
具体来讲就是说让两个数取模的结果代替前面的%后的数,原来%后面的数替代替%前的数,一直循环下去知道(%后面的数为零跳出循环),最后的%后面的是最大公约数,最小公倍数是原两个数相乘除以最大公约数。
2 倒置字符串的实现
题目
将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I
输入输出描述
每个测试输入包含1个测试用例: I like beijing. 输入用例长度不超过100依次输出倒置之后的字符串,以空格分割
解法
解法1的思路是分两步
1、整个字符串逆置顺序
2、每个单词再逆置顺序
例如题中所给测试用例:I like beijing. 按照解法1思路是这样做,先把整个字符串逆置得到:.gnijieb ekil l ,然后对每个单词再单独逆置就变成了:beijing. like I,这样就算逆置过来了,有了思路之后就是代码的编写了。
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void reverse(char* left, char* right)
{
while (left < right)
{
char tmp = *right;
*right = *left;
*left = tmp;
left++;
right--;
}
}
int main()
{
char arr[101] = { 0 };
gets(arr);
char* start = arr;
char* end = arr + strlen(arr)-1;
reverse(start, end);
char* cur = arr;
while (*cur != '\0')
{
while (*cur != ' ' && *cur != '\0')
{
cur++;
}
reverse(start, cur - 1);
start = cur + 1;
cur+=1;
}
printf("%s\n", arr);
return 0;
}