题解 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;
}