题解 P1008 【三连击】 最长最清晰题解

· · 题解

太长了,但是很清晰

#include <stdio.h>

int check_zero(int buff[])
{
    if(buff[0] == 0 || buff[1] == 0 || buff[2] == 0)
    {
        return 1;
    }
    return 0;
}

int get_number(int *a)
{
    return a[0] + a[1]*10 + a[2]*100;
}

void divide_number(int number,int numberBuff[])
{
    numberBuff[0] = number%10;
    numberBuff[1] = (number%100 - numberBuff[0])/10;
    numberBuff[2] = (number - numberBuff[0] - numberBuff[1]*10)/100;
}

int check_one_buff_repeat(int buff[])
{
    if(buff[0] == buff[1] || buff[1] == buff[2] || buff[0] == buff[2])
    {
        return 1;
    }
    return 0;
}

int check_repeat(int buff1[],int buff2[])
{
    for(int i = 0;i < 3;i++)
    {
        for(int j = 0;j <3;j++)
        {
            if(buff1[i] == buff2[j])
            {
                return 1;//number repeated
            }
        }
    }
    if(check_one_buff_repeat(buff1) || check_one_buff_repeat(buff2))
    {
        return 1;
    }

    return 0;//no repeat number
}

int main()
{
    int number1[3];
    int number2[3];
    int number3[3];
    for(int i = 1;i < 4;i++)
    {
        for(int j = 1;j < 10;j++)
        {
            if(i == j)
            {
                continue;
            }
            for(int k = 1;k < 10;k++)
            {
                if(k == j || k == i)
                {
                    continue;
                }
                number1[0] = k;
                number1[1] = j;
                number1[2] = i;
                int numberOne = get_number(number1);
                int numberTwo = numberOne*2;
                int numberThree = numberOne*3;

                divide_number(numberTwo,number2);
                divide_number(numberThree,number3);

                if(check_zero(number1) || check_zero(number2) || check_zero(number3))
                {
                    continue;
                }
                if(numberOne  >= 1000 || numberTwo >= 1000 || numberThree >= 1000)
                {
                    continue;
                }
                if(check_repeat(number1,number2) || check_repeat(number1,number3) || check_repeat(number3,number2))
                {
                    continue;
                }
                else
                {
                    printf("%d %d %d\n",numberOne,numberTwo,numberThree);
                }
            }
        }
    }

    return 0;
}