这个东西,总感觉有点小小的小问题,但又不知道问题出在哪?请大家帮忙看看吧!
////////////////////////////////////////////////////////////////////////////
//   Twenty-Four Points Game                         //
////////////////////////////////////////////////////////////////////////////
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <math.h>
////////////////////////////////////////////////////////////////////////////
int iCount ;
////////////////////////////////////////////////////////////////////////////
void HeadingTips() ;
void RandNums(int Nums[]) ;
void InputNums(int Nums[]) ;
void Filter(int iSums[]) ;
void ArrayN(int a, int b, int c, int d) ;
int CountN(int Flag, int a, int b) ;
void PrintR(int Flag, int i, int j, int k, int a, int b, int c, int d) ;
////////////////////////////////////////////////////////////////////////////
void main()
{
 char StartSign ;
 int iNum[4], iSum[24] ;
 int i, j, k, t, iS ;
 while(1)
 {
  HeadingTips() ;
  printf("Please choose an item to continue ...\n") ;
  printf("----------------------------------------\n") ;
  printf("  1. Random Numbers.\n") ;
  printf("  2. Input The Numbers.\n") ;
  printf("  3. Exit.\n") ;
  printf("----------------------------------------------------------\n") ;
  printf("Which one ? (1-3) : ") ;
  StartSign=getch() ;
  putch(StartSign) ;
  switch(StartSign)
  {
   case '1' :
    RandNums(iNum) ;
    break ;
   case '2' :
    InputNums(iNum) ;
    break ;
   default :
    exit(0) ;
  }
  iCount=0 ;
  iS=0 ;
  for (i=0 ; i<4 ; i++)
   for (j=0 ; j<4 ; j++)
    if (j!=i)
     for (k=0 ; k<4 ; k++)
      if (k!=j && k!=i)
       for (t=0 ; t<4 ; t++)
        if (t!=i && t!=j && t!=k)
        {
         iSum[iS]=iNum[i]*14*14*14+iNum[j]*14*14+iNum[k]*14+iNum[t] ;
         iS++ ;
        }
  Filter(iSum) ;
  if(iCount==0)
   printf("No answer !\n") ;
  printf("\nPress any key to return ... ") ;
  getch() ;
 }
}
////////////////////////////////////////////////////////////////////////////
void HeadingTips()
{
 system("cls") ;
 printf("Twenty-Four Points Game.\n") ;
 printf("========================\n") ;
 printf("\n") ;
}
////////////////////////////////////////////////////////////////////////////
void RandNums(int Nums[])
{
 int i ;
 HeadingTips() ;
 srand((unsigned)time(NULL)) ;
 for(i=0 ; i<4 ; i++)
  Nums[i] = rand() % 13 + 1 ;
 printf("The randomize numbers are : ") ;
 for(i=0 ; i<4 ; i++)
  printf("%d ", Nums[i]) ;
 printf("\n") ;
 printf("\n") ;
}
////////////////////////////////////////////////////////////////////////////
void InputNums(int Nums[])
{
 int i, InputSign, EndSign ;
 InputSign=1 ;
 while(InputSign)
 {
  HeadingTips() ;
  printf("Input 4 Numbers ( EXM : 1 2 3 4 ) : ") ;
  for(i=0 ; i<4 ; i++)
   scanf("%d", &Nums[i]) ;
  HeadingTips() ;
  printf("The numbers you inputed are : ") ;
  for(i=0 ; i<4 ; i++)
   printf("%d ", Nums[i]) ;
  printf("\n") ;
  printf("\n") ;
  EndSign=0 ;
  for(i=0 ; i<4 ; i++)
   if( !(Nums[i]>=0 && Nums[i]<=14) )
    EndSign++ ;
  if(EndSign)
  {
   printf("Input Error ! Press any key to input again ...") ;
   getch() ;
  }
  else
   InputSign=0 ;
 }
}
////////////////////////////////////////////////////////////////////////////
void Filter(int iSums[]) 
{
 int i, j, Nums[4] ;
 for(i=0 ; i<23 ; i++)
 {
  for(j=i+1 ; j<24 ; j++)
  {
   if(iSums[i]==iSums[j])
    iSums[j]=2955 ;
  }
 }
 for(i=0 ; i<24 ; i++)
 {
  for(j=0 ; iSums[i] != 0 ; j++)
  {
   Nums[j] = iSums[i] % 14 ;
   iSums[i] = iSums[i] / 14 ;
  }
  ArrayN(Nums[3], Nums[2], Nums[1], Nums[0]) ;
 }
}
////////////////////////////////////////////////////////////////////////////
void ArrayN(int a, int b, int c, int d)
{
 int i, j, k ;
 int Ret1, Ret2, Ret3 ;
 for(i=1 ; i<=4 ; i++)
  for(j=1 ; j<=6 ; j++)
   for(k=1 ; k<=6 ; k++)
   {    
    Ret1=CountN(i, a, b) ;
    Ret2=CountN(j, Ret1, c) ;
    Ret3=CountN(k, Ret2, d) ;
    if(Ret3==24)
    {
     iCount++ ;
     PrintR(1, i, j, k, a, b, c, d) ;
    }
    if( (k==1 || k==2 || k==3) && (j<=4) )
    {
     Ret1=CountN(i, a, b) ;
     Ret2=CountN(j, c, d) ;
     Ret3=CountN(k, Ret1, Ret2) ;
     if(Ret3==24)
     {
      iCount++ ;
      PrintR(2, i, j, k, a, b, c, d) ;
     }
    }
    if( (k==4) && (j<=4))
    {
     Ret1=CountN(i, a, b) ;
     Ret2=CountN(j, c, d) ;
     if(Ret2)
     {
      Ret3 = Ret1 / Ret2 ;
      if(Ret3==24)
      {
       iCount++ ;
       PrintR(2, i, j, k, a, b, c, d) ;
      }
     }
    }
   }
}
////////////////////////////////////////////////////////////////////////////
int CountN(int Flag, int a, int b)
{
 switch(Flag)
 {
  case 1 :
   return a+b ;
  case 2 :
   {
    if(a>=b)
     return a-b ;
    else
     return 30000 ;
   }
  case 3 :
   return a*b ;
  case 4 :
   {
    if(b!=0)
    {
     if( (float)a/b == a/b )
      return a/b ;
     else 
      return 30000 ;
    }
    else
     return 30000 ;
   }
  case 5 :
   {
    if(b>=a)
     return b-a ;
    else
     return 30000 ;
   }
  case 6 :
   {
    if(a!=0)
    {
     if( (float)b/a == b/a )
      return b/a ;
     else 
      return 30000 ;
    }
    else
     return 30000 ;
   }
  default :
   return 30000 ;
 }
}
////////////////////////////////////////////////////////////////////////////
void PrintR(int Flag, int i, int j, int k, int a, int b, int c, int d)
{
 char Sign[7]={'0', '+', '-', '*', '/', '-', '/'} ;
 if(Flag==1)
 {
  if(j==5 || j==6)
  {
   if(k==5 || k==6)
    printf("%d. %d%c(%d%c(%d%c%d))=24\n", iCount, d, Sign[k], c, Sign[j], a, Sign[i], b) ;
   else
    printf("%d. (%d%c(%d%c%d))%c%d=24\n", iCount, c, Sign[j], a, Sign[i], b, Sign[k], d) ;
  }
  else if(k==5 || k==6)
   printf("%d. %d%c((%d%c%d)%c%d)=24\n", iCount, d, Sign[k], a, Sign[i], b, Sign[j], c) ;
  else
   printf("%d. ((%d%c%d)%c%d)%c%d=24\n", iCount, a, Sign[i], b, Sign[j], c, Sign[k], d) ;
 }
 if(Flag==2)
 {
  if(j==5 || j==6)
   printf("%d. (%d%c%d)%c(%d%c%d)=24\n", iCount, a, Sign[i], b, Sign[k], d, Sign[j], c) ;
  else
   printf("%d. (%d%c%d)%c(%d%c%d)=24\n", iCount, a, Sign[i], b, Sign[k], c, Sign[j], d) ;
 }
}
////////////////////////////////////////////////////////////////////////////

 
											





 
	    

