火车站售票

// huochepiao.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <stdlib.h>
#include <iostream>
using namespace std;
int Ticket[81] = {1};
static int count = 0;

bool GetRequest(int *p) //读取request文件里的内容
{
 static FILE* fp = fopen("d:\\request.txt","r");
 static int nIndex = 0;
 static int inputData[80] = {0};
 static bool isfirst = true;
 int i;
 if(isfirst){
  for(i = 0; i < 80; i++){
   if(fscanf(fp,"%d,",&inputData[i]) == EOF)
    break;
  }
  isfirst = false;
  fclose(fp);
 }
 if(inputData[nIndex] == 0 || nIndex == 80)
  return false;
 *p = inputData[nIndex++];
 return true;
}

void OutputResult(int * SeatNum, int Count)//把获得的票信息写入到result文件中
{
 FILE* fp = fopen("d:\\result.txt","a");
 int i;
 fprintf(fp,"====================================\n");
 for(i = 0; i < Count; i++){
  fprintf(fp,"%d,",SeatNum[i]);
 }
 fprintf(fp,"\n");
 fclose(fp);
}

int SaleOne()
{
 int i = 0;
 for (i = 1; i != 81; ++i)
 {
  if (Ticket[i] == 0)
  {
   Ticket[i] = 1;
   cout << "票号为:" << i << endl;
   break;
  }
  else
  {
  }
 }
 count++;
 OutputResult(&i, 1);
 return 0;
}

bool IsCon()//两张票是否相连
{
 int num = 0;
 int a[2];
 bool flag;
 for (num = 1; num != 81; ++ num)
 {
  if (1 == num % 2 && Ticket[num] == 0 && Ticket[num+1] == 0)
  {
   flag = true;
   Ticket[num] = 1 ;
   a[0] = num;
   Ticket[num+1] = 1;
   a[1] = num + 1;
   cout << "票号为:" << num << "和" << num + 1 << endl;
   count += 2;
   OutputResult(a, 2);
   break;
  }
  else
  {
   flag = false;
  }
 }
 return flag;
}

int SaleTwo()
{
 if (!IsCon())
 {
  cout << "没有相连的票。";
  SaleOne();
  SaleOne();
 }
 return 0;
}
void OutputThree(int numa, int numb, int numc) //输出三张票的方法
{
 int a[3];
 Ticket[numa] = 1 ;
 Ticket[numb] = 1;
 Ticket[numc]= 1;
 a[0] = numa;
 a[1] = numb;
 a[2] = numc;
 OutputResult(a, 3);
 cout << "票号为:" << numa << "和" << numb << "和" << numc<< endl;
 count += 3;
}
bool IsRoom()//三张票是否在一个间隔内
{
 int num = 0;
 bool flag;
 for (num = 1; num != 81; ++ num)
 {
  if (1 == num % 2 &&Ticket[num] == 0 &&
   Ticket[num+1] == 0 && Ticket[num + 4] ==0)
  {
   flag = true;
   OutputThree(num, num+1, num+4);
   break;
  }
  if (1 == num % 2 &&Ticket[num] == 0 &&
   Ticket[num+4] == 0 && Ticket[num + 5] == 0)
  {
   flag = true;
   OutputThree(num, num+4, num+5);
   break;
  }
  if (0 == num % 2 &&Ticket[num] == 0 &&
   Ticket[num+3] == 0 && Ticket[num + 4] ==0)
  {
   flag = true;
   OutputThree(num, num+3, num+4);
   break;
  }
  if (0 == num % 2 &&Ticket[num-1] == 0 &&
   Ticket[num+3] == 0 && Ticket[num + 4] ==0)
  {
   flag = true;
   OutputThree(num+1, num+3, num+4);
   break;
  }
  else
  {
   flag = false;
  }  
 }
 return flag;
}
int SaleThree()
{
 if (!IsRoom())
 {
  cout << "没有相连的票。";
  SaleOne();
  SaleOne();
  SaleOne();
 }
 return 0;
}
bool IsSpace()//四张票是否在一个间隔内
{
 int num = 0;
 int a[4];
 bool flag;
 for (num = 1; num != 81; ++ num)
 {
  if (1 == num % 2 && Ticket[num] == 0 &&
   Ticket[num+1] == 0 && Ticket[num + 4] ==0 &&
   Ticket[num + 5] ==0)
  {
   flag = true;
   Ticket[num] = 1 ;
   a[0] = num;
   Ticket[num+1] = 1;
   a[1] = num + 1;
   Ticket[num+4]= 1;
   a[2] = num + 4;
   Ticket[num+5]= 1;
   a[3] = num + 5;
   cout << "票号为:" << num << "和" << num + 1 <<
    "和" << num + 4 << "和" << num + 5 << endl;
   count += 4;
   OutputResult(a, 4);
   break;
  }
  else
  {
   flag = false;
  }  
 }
 return flag;
}
int SaleFour()
{
 if (!IsSpace())
 {
  cout << "没有相连的票。";
  SaleOne();
  SaleOne();
  SaleOne();
  SaleOne();
 }
 return 0;
}
int _tmain(int argc, _TCHAR* argv[])

 int *p = Ticket;
 while(GetRequest(p))
 {
  if (*p > 4 || *p < 1)
  {
   cout << "此数字不符合买票标准!" << endl;
  }
  if (*p > 80 - count)
  {
   cout << "票不足或票已售完!" << endl;
   return 0;
  }
  else
  {
   switch (*p)
   {
   case 1:
    SaleOne();
    break;
   case 2:
    SaleTwo();
    break;
   case 3:
    SaleThree();
    break;
   case 4:
    SaleFour();
    break;
   default:
    break;
   }
  }
 }
 return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值