查表法运用

例题:查表法运用_第1张图片

查表法运用_第2张图片

第一次用查表法

别看我之前递归啥的,快速幂啥的都做,实际上我根本没学过算法

查表法看代码就能看出来

代码如下:

#include
#include
void fill_list(int max);
int list[32769];

int main(void)
{
    int M[1000], n, max = 0;
    scanf("%d", &n);
    for(int i = 0; i < n; i++)
    {
        scanf("%d", &M[i]);
        max = (max < M[i] ? M[i] : max);
    }
    fill_list(max);
    for(int i = 0; i < n; i++)
    {
        printf("%d", list[M[i]]);
        if(i != n - 1) putchar('\n');
    }

    return 0;
}
void fill_list(int max)
{
    for(int x1 = 0; x1 <= (int)sqrt(max / 4.0) + 1; x1++)
    {
        for(int x2 = x1; x2 <= (int)sqrt((max - x1) / 3.0) + 1; x2++)
        {
            for(int x3 = x2; x3 <= (int)sqrt((max - x1 - x2) / 2.0) + 1; x3++)
            {
                for(int x4 = x3; x4 <= (int)sqrt((max - x1 - x2 - x3) * 1.0) + 1; x4++)
                {
                    int num = x1 * x1 + x2 * x2 + x3 * x3 + x4 * x4;
                    if(num <= max)
                        list[x1 * x1 + x2 * x2 + x3 * x3 + x4 * x4]++;
                }
            }
        }
    }
    
    return;
}

回来p掉了学校名。。。

你可能感兴趣的:(算法)