⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 安全过河问题.txt

📁 c语言的常用函数以及一些小游戏代码,如文曲星小游戏、五子棋游戏等
💻 TXT
字号:
安全过河问题该游戏是我由一个数学建模题――“安全过河问题”而构思的。有三个商人带者三个随从和货物过河,
船每次最多只能载两个人,要求保证在过河期间商人的人数要大于或等于随从的人数,否则随从杀人抢货。
构思:
   用两个数组来表示两岸的商人和随从,其中'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;
  }
      }
 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -