初测的编程测试

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;
}

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值