算法竞赛入门经典第二版——第二章例题

例题2-1 aabb

输出所有形如aabb的4位完全平方数(即前两位数字相等,后两位数字也相等)。

代码:

#include <stdio.h>

int main()
{
    for (int x = 1;; x++)
    {
        int n = x * x;
        if (n < 1000)
        {
            continue;
        }
        if (n > 9999)
        {
            break;
        }
        int hi = n / 100;
        int lo = n % 100;
        if (hi / 10 == hi % 10 && lo / 10 == lo % 10)
        {
            printf("%d\n", n);
        }
    }
}

例题2-2 3n+1问题

对于任意大于1的自然数n,若n为奇数,则将n变为3n+1,否则变为n的一半。经过若干次这样的变换,一定会使n变为1。例如:3→10→5→16→8→4→2→1.

输入n,输出变换的次数。n<=10^9

样例输入:
3
样例输出:
7

代码:

#include <stdio.h>

int main()
{
    int n, count = 0;
    scanf("%d", &n);
    while (n > 1)
    {
        if (n % 2 == 1)
        {
            n = n * 3 + 1;
        }
        else
        {
            n /= 2;
        }
        count++;
    }
    printf("%d", count);
    return 0;
}

例题2-3 近似计算

计算 $ \frac π4 =1-\frac 13+\frac 15-\frac 17+··· $,直到最后一项小于10^-6

代码:p

#include <stdio.h>

int main()
{
    double sum = 0, t;
    int n = 0;
    do
    {
        t = 1.0 / (2 * n + 1);
        if (n % 2)
            sum -= t;
        else
            sum += t;
        n++;
    } while (t >= 1e-6);
    printf("%.6f\n", sum);
    return 0;
}
posted @ 2020-08-12 14:41  Techoc  阅读(102)  评论(0编辑  收藏  举报