poj1543---完美立方(枚举)

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int cube[101],n,i,a,b,c,d;
    for(i=1;i<=100;i++)
    {
        cube[i]=i*i*i;
    }
    scanf("%d",&n);
    for(a=6;a<=n;a++)
    {
        for(b=2;b<a;b++)
        {
            for(c=b+1;c<a;c++)
            {
                for(d=c+1;d<a;d++)
                {
                    if(cube[a]==cube[b]+cube[c]+cube[d])
                        printf("Cube = %d, Triple = (%d,%d,%d)\n",a,b,c,d);
                }
            }
        }
    }
    return 0;
}

  

题意:用户输入N,a<=N,使得cube[a]=cube[b]+cube[c]+cube[d],The values of b, c, and d should also be listed in non-decreasing order on the
line itself,同一行的b,c,d,也应该从左至右按照递增的顺序,, one perfect cube per line, in non-decreasing order of a,每一行的a按照递增顺序

输出格式:Cube = 6, Triple = (3,4,5)   分别代表a,b,c,d

思路:从题目case中看出最小a为6,题目, to find integers greater than 1 that satisfy the "perfect cube",所以从b,c,d从取2,3,4开始,个人觉得当a取大值,b,c,d还是从最开始的2,3,4取值,算法效率低,不过这就是枚举

6 2 3 4
6 2 3 5
6 2 4 5
6 3 4 5
7 2 3 4
7 2 3 5
7 2 3 6
7 2 4 5
7 2 4 6
7 2 5 6
7 3 4 5
7 3 4 6
7 3 5 6
7 4 5 6
8 2 3 4

以上为有效进入到if()判断的,没事多写几遍

第一次进入for循环的i的值需要和循环条件比

技巧:cube[20]就表示20的立方,cube[100],需要将数组开成101

posted @ 2015-05-07 16:17  Gabyler  阅读(379)  评论(1编辑  收藏  举报