使用递归算24点
#include<iostream>
#include<cmath>
using namespace std;
double a[4];
const double eps = 1e-3;
int result(int n)
{
int i, j;
double p, q;
if (n == 1)
{
if (fabs(a[0] - 24) < eps)
return 1;
else
return 0;
}
for (i = 0; i < n - 1; i++)
for (j = i + 1; j < n; j++)
{
p = a[i];
q = a[j];
a[j] = a[n - 1];
a[i] = p + q;
if (result(n - 1))
return 1;
a[i] = p - q;
if (result(n - 1))
return 1;
a[i] = q - p;
if (result(n - 1))
return 1;
a[i] = p * q;
if (result(n - 1))
return 1;
if (q != 0)
{
a[i] = p / q;
if (result(n - 1))
return 1;
}
if (p != 0)
{
a[i] = q / p;
if (result(n - 1))
return 1;
}
a[i] = p;
a[j] = q;
}
return 0;
}
int main()
{
int i;
while ((cin >> a[0] >> a[1] >> a[2] >> a[3]) && (a[0] + a[1] + a[2] + a[3] != 0))
{
if (result(4))
cout << "YES" << endl;
else
cout << "NO" << endl;
}
return 0;
}
打表
#include <stdio.h>
char res[] =
{
0x00,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0x80,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x80,0xF0,0x78,0x38,0x1C,0x06,0x03,0x80,0x40,0x00,0x00,0x20,0x20,0x2B,0x1A,0x80,0x63,0xAC,0x10,0x5E,0x84,0x80,0x08,0x0F,0x0A,0xC3,0x73,0xAC,0x43,0x6B,0x94,0xAF,0xFD,0xF2,0x02,0x01,0xE1,0xA8,0xEB,0x37,0x92,0x8F,0xFD,0x2A,0x7B,0x84,0x80,0x00,0x38,0x01,0x84,0x34,0xA1,0x00,0x4A,0x48,0x03,0x08,0x48,0x08,0x07,0x03,0xAD,0xAE,0xFF,0xD2,0x93,0xC0,0x60,0x38,0x4B,0x30,0x00,0x60,0x04,0x14,0xA4,0xA8,0x80,0x18,0x00,0x01,0x84,0x02,0x10,0x0E,
0x05,0xEB,0xFF,0x7B,0x8C,0x23,0x84,0x61,0x3C,0x84,0xC0,0x00,0x40,0x12,0x1F,0x21,0x20,0x48,0x2C,0xC0,0x21,0x30,0x08,0x00,0x00,0x00,0x08,0x0F,0x07,0x83,0x81,0xC0,0x60,0x38,0x04,0x00,0x00,0x02,0x03,0xC3,0xF1,0xFC,0x7E,0x3E,0xCF,0x07,0xE8,0xE8,0x00,0x80,0xF0,0xFC,0x7F,0x3F,0xCF,0xF7,0xFD,0xFF,0xFF,0xDF,0xE0,0x3C,0x3F,0x1F,0xCF,0xF7,0xFD,0xEF,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x87,0xF3,0xFD,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xDF,0xE0,0xE0,0x7E,0x3F,0xDE,0xFF,0xFF,0xB9,0xFF,0xDE,0xB7,0xBC,0xFF,0x1C,0x0F,0xB7,0xFF,
0xFF,0xFF,0xFF,0xF7,0xEC,0xF1,0x7E,0xDF,0xF1,0x80,0xF0,0x7F,0xFF,0xFF,0xFD,0xEB,0x3C,0x4E,0x13,0xCC,0xFF,0x38,0x1F,0xAF,0xFF,0xFF,0xFF,0xDE,0xF7,0xEC,0xF3,0x7F,0xCF,0xE1,0x00,0xE8,0x7F,0xBF,0xF7,0xF8,0xFF,0x7F,0xCF,0xF3,0xF8,0x5C,0x00,0x00,0x20,0x20,0x2B,0x1A,0x80,0x63,0xAC,0x10,0x5E,0x84,0x80,0x08,0x0F,0x0F,0xC7,0xF3,0xFC,0xFF,0x7F,0xDF,0xFF,0xFD,0xFE,0x02,0x03,0xF1,0xDC,0xFF,0x7F,0xDF,0xFD,0xFD,0xFE,0x7F,0xDF,0xA0,0xAC,0x7F,0x3F,0xDD,0xFE,0xFD,0xFF,0xFF,0xDF,0xFF,0xFF,0xFF,0x1A,0x8F,0xF7,0xFF,0xBF,0xFF,
0xDF,0xFF,0xFD,0xFF,0xFF,0xDF,0xF0,0x18,0xFF,0x7F,0xDF,0xF7,0xFD,0xE7,0x7B,0xFF,0xFF,0xFD,0xFE,0x3A,0xDF,0xFD,0xFF,0xFF,0xFF,0xDE,0xFF,0xFD,0xFB,0xFF,0xFF,0xF0,0x41,0xFF,0x7F,0x9F,0xF7,0xFF,0xFF,0x7E,0xDF,0x27,0xFD,0x7A,0x5E,0xBF,0xF7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,0xFF,0xFF,0xDF,0xF1,0x21,0xFE,0x7E,0xBF,0xF7,0xFD,0xFE,0xFF,0xD7,0xA7,0xFC,0x6A,0x00,0x80,0xF0,0xAC,0x37,0x3A,0xC4,0x36,0xB9,0x4A,0xFF,0xDF,0x20,0x3C,0x3F,0x1F,0xCF,0xF7,0xFD,0xEF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0A,0xC7,0xF3,0xFD,0xDF,0xEF,0xDF,0xFF,
0xFD,0xFF,0xFF,0xFF,0xF0,0xDC,0xFF,0x77,0xDF,0xFD,0xFF,0xFD,0x7F,0xFF,0xFF,0xBF,0xFF,0x3A,0xDF,0xFE,0xFF,0x7F,0xFF,0xDF,0xFF,0xED,0xF7,0xFF,0x7F,0xF1,0x0D,0xEF,0x7F,0xFF,0xD7,0xFC,0xEF,0x7F,0xDF,0xBE,0xFF,0xFF,0x6B,0xBF,0xFF,0xFD,0xFF,0xFE,0xDF,0xFF,0xFF,0xDF,0xFF,0xDF,0xF5,0x2B,0xFF,0x7F,0xFF,0xF7,0xDD,0xFB,0xF7,0xDE,0xFF,0xFD,0xFF,0xFF,0xFF,0xFF,0xFF,0xEF,0xFF,0x7B,0xFF,0xFF,0xFF,0xF7,0xFF,0xF7,0xCB,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0xDF,0xFF,0xFD,0xFF,0x02,0x01,0xE1,0xA8,0xEB,0x37,0x92,0x8F,0xFD,0x2A,
0x7B,0x84,0x80,0x78,0x7F,0x3F,0xDF,0xF7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,0xFE,0x1A,0x8F,0xF7,0xFF,0xBF,0xFF,0xDF,0xFF,0xFD,0xFF,0xFF,0xDF,0xF3,0xAD,0xFF,0xEF,0xF7,0xFF,0xFD,0xFF,0xFE,0xDF,0x7F,0xF7,0xFF,0x37,0x9F,0xFF,0xFF,0xFF,0x7F,0xFF,0xEF,0xCF,0xF7,0xFF,0xDE,0xE4,0xA3,0xFF,0x7F,0xDF,0xFF,0xF9,0xFF,0xFF,0xDF,0xF7,0xFD,0xDF,0xFF,0xFF,0xFF,0xFF,0xFB,0xFC,0xFF,0xFF,0x7F,0x9F,0xFF,0xFF,0xF4,0xAB,0xFF,0x7F,0xDF,0x7F,0xDD,0xFF,0xE7,0xDF,0xEF,0xFD,0xFB,0x7B,0xBF,0xFF,0xFF,0xFD,0xFF,0xDF,0xFF,0xFF,0xFF,0xEF,0xDF,
0xF1,0x21,0xFE,0x7F,0xFF,0xF7,0xB9,0xDF,0xFF,0xDF,0xB7,0xFC,0xDE,0x00,0x03,0x80,0x18,0x43,0x4A,0x10,0x04,0xA4,0x80,0x30,0x84,0x80,0xE0,0x7E,0x3F,0xDE,0xFF,0xFF,0xB9,0xFF,0xDE,0xB7,0xBC,0xFF,0x01,0x8F,0xF7,0xFD,0xFF,0x7F,0xDE,0x77,0xBF,0xFF,0xFF,0xDF,0xE1,0x0D,0xEF,0x7F,0xFF,0xD7,0xFC,0xEF,0x7F,0xDF,0xBE,0xFF,0xFF,0x4A,0x3F,0xF7,0xFD,0xFF,0xFF,0x9F,0xFF,0xFD,0xFF,0x7F,0xDD,0xF4,0x03,0xB9,0x79,0xCE,0xF7,0xFD,0x39,0x5F,0x8E,0xE3,0xBD,0xF3,0x4A,0x7F,0xF7,0xBD,0xFF,0xFF,0xD7,0xEF,0xFD,0xFF,0x7F,0xFE,0xF2,0x01,
0xEB,0xFF,0xDF,0xB7,0xFC,0xEE,0x7F,0xCB,0x97,0xED,0xEE,0x30,0x9E,0xFF,0xFF,0xBF,0x7F,0xCE,0xF7,0xFD,0xFB,0xFF,0xDF,0xE1,0x20,0xFF,0x7F,0xBF,0xF7,0x7D,0xF3,0xFB,0xDE,0xE7,0xF9,0x78,0x08,0x07,0x03,0xAD,0xAE,0xFF,0xD2,0x93,0xC0,0x60,0x38,0x4B,0x31,0xC0,0xFB,0x7F,0xFF,0xFF,0xFF,0xFF,0x7E,0xCF,0x17,0xED,0xFF,0x3A,0xDF,0xFD,0xFF,0xFF,0xFF,0xDE,0xFF,0xFD,0xFB,0xFF,0xFF,0xF6,0xBB,0xFF,0xFF,0xDF,0xFF,0xED,0xFF,0xFF,0xFD,0xFF,0xFD,0xFF,0xFF,0xFF,0xFF,0xFF,0xFB,0xFC,0xFF,0xFF,0x7F,0x9F,0xFF,0xFF,0xF4,0xA7,0xFF,0x7B,
0xDF,0xFF,0xFD,0x7E,0xFF,0xDF,0xF7,0xFF,0xEF,0x3C,0x1F,0xBF,0xFF,0xFF,0xF7,0xFF,0xF7,0xEC,0xF1,0x7E,0xDF,0xE1,0x80,0xF1,0x7E,0xFD,0xFE,0x7D,0xFF,0x3C,0x47,0x03,0xC5,0xFB,0x38,0x5F,0xBF,0xFF,0xFF,0xFF,0xDF,0xF7,0xEC,0xF1,0x7E,0xFF,0xF2,0xCD,0xFF,0xFF,0xDF,0xFF,0xFF,0xEF,0x7F,0x9F,0xBF,0xFF,0xF6,0x00,0x06,0x00,0x41,0x4A,0x4A,0x88,0x01,0x80,0x00,0x18,0x40,0x21,0x80,0xF0,0x7F,0xFF,0xFF,0xFD,0xEB,0x3C,0x4E,0x13,0xCC,0xFF,0x04,0x1F,0xF7,0xF9,0xFF,0x7F,0xFF,0xF7,0xED,0xF2,0x7F,0xD7,0xA5,0x2B,0xFF,0x7F,0xFF,0xF7,
0xDD,0xFB,0xF7,0xDE,0xFF,0xFD,0xFF,0x4A,0xBF,0xF7,0xFD,0xF7,0xFD,0xDF,0xFE,0x7D,0xFE,0xFF,0xDF,0xB2,0x01,0xEB,0xFF,0xDF,0xB7,0xFC,0xEE,0x7F,0xCB,0x97,0xED,0xEE,0x18,0x0F,0x17,0xEF,0xDF,0xE7,0xDF,0xF3,0xC4,0x70,0x3C,0x5F,0xB0,0x00,0xE1,0x7C,0x9E,0xF7,0xF8,0xB9,0x1C,0x06,0x03,0x81,0x50,0x18,0x4F,0x37,0xFF,0xFF,0xFF,0xDF,0xB3,0xC4,0xE0,0x7C,0x7F,0xA0,0x08,0xFF,0x5E,0x9F,0xF7,0xED,0xEE,0x7E,0xD5,0x0F,0xE9,0x68,0x10,0x0E,0x05,0xEB,0xFF,0x7B,0x8C,0x23,0x84,0x61,0x3C,0x84,0xC3,0x81,0xFA,0xFF,0xFF,0xFF,0xFD,0xEF,
0x7E,0xCF,0x37,0xFC,0xFE,0x5E,0xBF,0xF7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,0xFF,0xFF,0xDF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0xF7,0xBF,0xFF,0xFF,0xFF,0x7F,0xFF,0x7B,0xBF,0xFF,0xFF,0xFD,0xFF,0xDF,0xFF,0xFF,0xFF,0xEF,0xDF,0xF3,0x09,0xEF,0xFF,0xFB,0xF7,0xFC,0xEF,0x7F,0xDF,0xBF,0xFD,0xFE,0x38,0x5F,0xBF,0xFF,0xFF,0xFF,0xDF,0xF7,0xEC,0xF1,0x7E,0xFF,0xF1,0x84,0xF3,0x7F,0xFF,0xFF,0xFD,0xFB,0x3C,0x4E,0x07,0xC7,0xFA,0x3C,0x9F,0xFF,0xFF,0xDF,0xEF,0xFF,0xF7,0xED,0xF1,0xFE,0x1F,0xC1,0x30,0xFE,0x7F,0xFF,0xF7,0xFD,0xFE,0xFF,0xFF,
0xA7,0xF0,0xE8,0x00,0x04,0x01,0x21,0xF2,0x12,0x04,0x82,0xCC,0x02,0x13,0x00,0x81,0x00,0xE8,0x7F,0xBF,0xF7,0xF8,0xFF,0x7F,0xCF,0xF3,0xF8,0x5C,0x12,0x1F,0xE7,0xEB,0xFF,0x7F,0xDF,0xEF,0xFD,0x7A,0x7F,0xC6,0xA7,0xCB,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0xDF,0xFF,0xFD,0xFF,0x12,0x1F,0xE7,0xFF,0xFF,0x7B,0x9D,0xFF,0xFD,0xFB,0x7F,0xCD,0xE1,0x20,0xFF,0x7F,0xBF,0xF7,0x7D,0xF3,0xFB,0xDE,0xE7,0xF9,0x78,0x2C,0xDF,0xFF,0xFD,0xFF,0xFF,0xFE,0xF7,0xF9,0xFB,0xFF,0xFF,0x60,0x08,0xFF,0x5E,0x9F,0xF7,0xED,0xEE,0x7E,0xD5,0x0F,0xE9,
0x68,0x13,0x0F,0xE7,0xFF,0xFF,0x7F,0xDF,0xEF,0xFF,0xFA,0x7F,0x0E,0x80,0x20,0x5C,0x1A,0x9F,0xF3,0x79,0x78,0xFD,0x96,0x83,0xA0,0x40,
};
char bit[] =
{
0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01
};
void main()
{
for(;;)
{
char str[8];
int num;
if( gets(str)==NULL || str[0]==NULL )
{
break;
}
num = (str[0]-'0')*1000 + (str[2]-'0')*100 + (str[4]-'0')*10 + (str[6]-'0');
if( num==0 )
{
break;
}
puts(res[num/8] & bit[num&7] ? "YES" : "NO" );
}
}