论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > C语言程序设计教程
Tag:新手,函数,指针,数据类型,对象,Turbo,入门,运算符,数组,结构,二级,,tc,游戏,试题,问答,编译,视频教程

安全过河问题

文章类别:C语言程序设计 | 发表日期:2008-9-24 14:46:47

   该游戏是我由一个数学建模题——“安全过河问题”而构思的。有三个商人带者三个随从和货物过河,
船每次最多只能载两个人,要求保证在过河期间商人的人数要大于或等于随从的人数,否则随从杀人抢货。
构思:
   用两个数组来表示两岸的商人和随从,其中'A'表示商人,'B'表示随从,数组a 表示此岸,数组b表示彼岸;
通过输入过河的人数,来改变两个数组中的'A'和'B'的个数,在用文本输出两岸的情况.
游戏规则是这样似的:
 1)输入过河的人数;
 2)非法输入按按了退出处理(如:每次输入的人数不得多于两个;不得输入负数,字母等).
 

"safe.c"

#include <stdio.h>
 #include <conio.h>
 #include <string.h>
 
 void helpf()
 {
  clrscr();
  gotoxy(6,3);
  printf("该游戏是由一个数学建模题——“安全过河问题”而构思的。\n\n有三个商人带者三个随从和货物过河,船每次最多只能载两个人,要求保证在过河期间\n\n商人的人数要大于或等于随从的人数,否则随从杀人抢货。\n\n游戏规则是这样似的:\n\n 1)输入过河的人数;\n\n 2)非法输入按按了退出处理");
  printf("祝君好运!\n");
  printf("\t\t\t作者:双刃剑\n");
  printf("\t\t\tE-mail: fuzhufang@yahoo.com.cn");
 }
 char a[6];
 char b[6];
 void printcase(char a[],char b[])
 {int i,j,xa,xb,x0,ya,yb,y0;
  xa=xb=x0=ya=yb=y0=0;
  gotoxy(1,4);
  printf("此岸\t\t     彼岸\n");
  for(i=0;i<6;i++) {
   if(a[i]=='A')
    xa++;
   else if (a[i]=='B')
    xb++;
   else if(a[i]=='0')
    x0++;
  }
  for(i=1;i<=xa;i++)
  printf("商人  ");
 printf("\n");
  for(i=1;i<=xb;i++)
  printf("随从  ");
 printf("\n");
 for(i=1;i<=x0;i++)
  printf("   ");
 printf("\n");
 for(j=0;j<6;j++) {
  if(b[j]=='A')
   ya++;
  else if(b[j]=='B')
   yb++;
  else if(b[j]=='0')
   y0++;
 }
 gotoxy(25,5);
 for(j=1;j<=ya;j++)
  printf("商人 ");
 gotoxy(25,6);
 for(j=1;j<=yb;j++)
  printf("随从 ");
 gotoxy(25,7);
 for(j=1;j<=y0;j++)
   printf("   ");
 if(xa==0 && xb==0 && ya==3 && yb==3)  {
  printf("\n\n你以成功帮助商人安全过河!");
  exit(0);
 }
 }

 void main()
 {
 int i,x,y,key,ca,cb,j,aA,aB,bA,bB;
 helpf();
 getch();
 clrscr();
 window(1,1,25,80);
 textbackground(1);
 textcolor(14);
 clrscr();
 for(i=0;i<3;i++)
  a[i]='A';
 for(i=3;i<6;i++)
  a[i]='B';
 for(i=0;i<6;i++)
  b[i]='0';
 printcase(a,b);
 while(1){
 gotoxy(20,10);
 printf("输入去此岸商人的人数: ");
   scanf("%d",&x);
 gotoxy(22,10);
 printf("输入去此岸随从的人数: ");
   scanf("%d",&y);
  for(ca=0,cb=0,i=0;i<6;i++) {
   if(a[i]=='A')

    ca++;
   else if(a[i]=='B')
    cb++;
  }
  if(x<0 || x>ca || y<0 || y>cb || x+y<1 ||x+y>2) {
  printf("输入有误!!");
  exit (0);
 }
 for(i=1;i<=x;i++) {
  for(j=0;j<6;j++)
   if(a[j]=='A') {
    a[j]='0';
    break;
   }
 }
  for(i=1;i<=x;i++) {
  for(j=0;j<6;j++)
   if(b[j]=='0') {
    b[j]='A';
       break;
   }
 }
  for(i=1;i<=y;i++) {
  for(j=0;j<6;j++)
   if(a[j]=='B') {
    a[j]='0';
    break;
   }
 }
  for(i=1;i<=y;i++) {
  for(j=0;j<6;j++)
   if(b[j]=='0') {
    b[j]='B';
    break;
   }
 }
 for(aA=0,aB=0,i=0;i<6;i++) {
  if(a[i]=='A')
   aA++;
  else if(a[i]=='B')
   aB++;
 }
 for(bA=0,bB=0,i=0;i<6;i++) {
  if(b[i]=='A')
   bA++;
  else if(b[i]=='B')
   bB++;
 }  
 
 if((aA==3) ||(bA==3) || (aA==aB) || (bA==bB))  {
      clrscr();
      printcase(a,b);
             }
 else{
  clrscr();
  printf("商人被杀,再来一次吧!!!!\n\n\n\n");
        printcase(a,b);
     getch();
   for(i=0;i<3;i++)
             a[i]='A';
   for(i=3;i<6;i++)
    a[i]='B';
   for(i=0;i<6;i++)
    b[i]='0';
  clrscr();
  printcase(a,b);
  continue;
  }
 gotoxy(20,10);
 printf("输入回此岸商人的人数: ");
  scanf("%d",&x);
 gotoxy(22,10);
  printf("输入回此岸随从的人数:");
   scanf("%d",&y);
 for(ca=0,cb=0,i=0;i<6;i++){
  if(b[i]=='A')
   ca++;
  else if(b[i]=='B')
   cb++;
 }
 if(x<0 || x>ca || y<0 || y>cb || x+y<1 || x+y>2) {
   printf("输入有误!!");
  exit (0);
 }
 for(i=1;i<=x;i++) {
  for(j=0;j<6;j++)
   if(b[j]=='A') {
    b[j]='0';
    break;
   }
 }
 for(i=1;i<=x;i++) {
  for(j=0;j<6;j++)
   if(a[j]=='0') {
    a[j]='A';
    break;
   }
 }
    for(i=1;i<=y;i++) {
  for(j=0;j<6;j++)
   if(b[j]=='B') {
    b[j]='0';
    break;
   }
 }
 for(i=1;i<=y;i++) {
  for(j=0;j<6;j++)
   if(a[j]=='0') {
    a[j]='B';
    break;
   }
 }
 
 
 for(aA=0,aB=0,i=0;i<6;i++) {
  if(a[i]=='A')
   aA++;
  else if(a[i]=='B')
   aB++;
 }
 for(bA=0,bB=0,i=0;i<6;i++) {
  if(b[i]=='A')
   bA++;
  else if(b[i]=='B')
   bB++;
 }
 
 if((aA==3) ||(bA==3) || (aA==aB) || (bA==bB)){
  clrscr();
  printcase(a,b);
  
 }
  else {
  
  clrscr();
   printf("商人被杀,再来一次吧!!!!\n\n\n\n");
        printcase(a,b);
   getch();
   for(i=0;i<3;i++)
             a[i]='A';
   for(i=3;i<6;i++)
    a[i]='B';
   for(i=0;i<6;i++)
    b[i]='0';
  clrscr();
  printcase(a,b);
  continue;
  }
      }
 }

上一篇:{应用}贪吃蛇,还在完善中 人气:4572
下一篇:{应用}怎样编制黑白棋(1) 人气:7422
视频教程列表
文章教程搜索
 
C语言程序设计推荐教程
C语言程序设计热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058