C++笔试算法解题思路-爬坑笔记

2022-01-17  本文已影响0人  JianLee
1、猴子吃桃问题

一只小猴子一天摘了许多桃子,第一天吃了一半,然后忍不住又吃了一个;第二天又吃了一半,再加上一个;后面每天都是这样吃。到第10天的时候,小猴子发现只有一个桃子了。问小猴子第一天共摘了多少个桃子。
使用递归思路解决,

#include <iostream>

using namespace std;

int num(int n) {
    int i;
    if (n == 1)i = 1;
    else i = 2 * (num(n - 1) + 1);
    return i;
}

int main() {
    cout << "猴子一共摘了" << num(10) << "个桃子";
    return 0;
}
2、判断闰年

被4整除,并且不是100个倍数
被4整除,是100且是400倍数

#include <iostream>
using namespace std;
 
int main()
{
    int year;
 
    cout << "输入年份: ";
    cin >> year;
 
    if (year % 4 == 0)
    {
        if (year % 100 == 0)
        {
            // // 这里如果被 400 整除是闰年
            if (year % 400 == 0)
                cout << year << " 是闰年";
            else
                cout << year << " 不是闰年";
        }
        else
            cout << year << " 是闰年";
    }
    else
        cout << year << " 不是闰年";
 
    return 0;
}
3、绘制三角形图案

解题思路:
正直角和反直角,for循环嵌套,外层控制行,内层控制星的个数。
正三角,首先判断每一行空白处,在非空白处打*(个数为n行+2),一行打印结束换行。

#include <iostream>

using namespace std;
int main() {
    cout << "请输入行数";
    int rows;
    cin >> rows;
    cout << "正直角三角" << endl;
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j <= i; j++) {
            cout << "*";
        }
        cout << endl;
    }
    cout << "反直角三角" << endl;
    for (int i = 0; i < rows; i++) {
        for (int j = rows; j > i; j--) {
            cout << "*";
        }
        cout << endl;
    }
    cout << "正三角" << endl;
    int n = 1;
    for (int i = 1; i <= rows; i++) {
        for (int j = 0; j < rows - i; j++) {
            cout << " ";
        }
        for (int k = 0; k < n; k++) {
            cout << "*";
        }
        n += 2;
        cout << endl;
    }
    return 0;
}
4、最大公约数和最小公倍数

最大公约数:取min数做判断,满足同时整除两数的最大一个数
最小公倍数:取max数做判断,满足同时整除两数的最小一个数 解法2:(a*b)/最大公约数

#include <iostream>
using namespace std;
 
int main()
{
    int n1, n2;
 
    cout << "输入两个整数: ";
    cin >> n1 >> n2;
    
    while(n1 != n2)
    {
        if(n1 > n2)
            n1 -= n2;
        else
            n2 -= n1;
    }
 
    cout << "HCF = " << n1;
    return 0;
}

#include <iostream>
using namespace std;
 
int main()
{
    int n1, n2, max;
 
    cout << "输入两个数: ";
    cin >> n1 >> n2;
    
    // 获取最大的数
    max = (n1 > n2) ? n1 : n2;
 
    do
    {
        if (max % n1 == 0 && max % n2 == 0)
        {
            cout << "LCM = " << max;
            break;
        }
        else
            ++max;
    } while (true);
    
    return 0;
}
上一篇下一篇

猜你喜欢

热点阅读