尺子的刻度

一根29cm长的尺子,只允许在它上面刻7个刻度。若要用它能测量出1~ 29cm的各种整长度,刻度应如何选择?

#include<stdio.h>
#include<math.h>
check(int b,int c,int d,int e,int f,int g,int h)
{
    int refer[30] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29};
    int a[9];
    int j,k,l;
    a[0] = 0;
    a[1] = b;
    a[2] = c;
    a[3] = d;
    a[4] = e;
    a[5] = f;
    a[6] = g;
    a[7] = h;
    a[8] = 29;
    int beta[9];//构建二维图,计算出之间的差值。
    for (int i = 0; i<9; i++)
        beta[i] = a[i];
    for (j = 0; j<9; j++)
        for (k = j+1; k<9 ; k++)
            for (l = 0; l<30; l++)
                if(beta[k] - a[j] == refer[l])
                    refer[l] = 30;
    int count = 0;
    for (int m = 0; m<30; m++)
        if(refer[m] == 30)
            count += 1;
    if (count == 29)
        return 1;
    else
        return 0;
}


int main()
{
    int a = 0,b,c,d,e,f,g,h,i = 29;
    int count = 0;
    for (b = a+1;b<29; b++)
        for (c = b+1; c<29; c++)
            for (d = c+1; d<29; d++)
                for (e = d+1; e<29; e++)
                    for (f = e+1; f<29; f++)
                        for (g = f+1; g<29; g++)
                            for (h = g+1; h<29; h++) //循环太多,建议改进。。。
                                if (check(b,c,d,e,f,g,h) == 1)
                                {
                                    printf("%d %d %d %d %d %d %d %d %d\n", a,b,c,d,e,f,g,h,i);
                                    count += 1;
                                }
    printf("add up to = %d", count);
}

posted @ 2020-07-20 00:02  一只小小郑  阅读(669)  评论(0编辑  收藏  举报