回 帖 发 新 帖 刷新版面

主题:有意来编一个这个程序!

请大家帮我编个程,告诉我具体一点的算法也行呀.题目如下:商人3个,各带一个随从,随从们约定,在河的任一岸,只是随从人数多于商人就杀人越货.请问商人们怎么过河?
 编为程序.求出具体方案.
   数学解法为: 设x,y分别为此岸的商人数和随从数.u,v分别人船上商人数和随从数.
S为x,y的允许集合:S{x=0,y=1,2,3,4;x=4,y=1,2,3,4;x=y=1}
D为允许步骤:D={1≤u+v≤2,u,v=0,1,2}  从而也就转化为:Sk+1=Sk+(-1)**(k)*Dk
S从S(4,4)到S(0,0)就算过河.
  帮忙编程来算这个问题!

回复列表 (共3个回复)

沙发

伙计!写的题目不知道什么意思!

板凳

属于数学建模方面的问题,去找找这方面的书,可能会有思路的

3 楼

我只能提示一下你:用C语言了,你应该看得懂吧.要改进哦!
#include "stdio.h"
#include "conio.h"
#include "stdio.h"
#include "math.h"
#define NUM 3
int n,m;

void main()
{ int k=1,maze[NUM+1][NUM+1];
int p=NUM;
int q=NUM;

/*满足此岸的人数使得商人将不会被杀的状态为1否则为0*/
for(n=NUM;n>=0;n--) /*此时的n,m表示为n个商人m个随从*/

   for(m=NUM;m>=0;m--)
   {
    if (n==0||n==3||n==m)
           maze[n][m]=1;
    else maze[n][m]=0;
   }
}
  for(n=0;n<=2;n++) /*此时的n,m表示为商人,随从可渡船的范围*/
    {
  for(m=0;m<=2;m++)
   {
     if(p==0&&q==0) break;
     else if(maze[p][q]==1&&p<=NUM&&q<=NUM)
       {
         if((n+m)<=2&&(n+m)>=1)
            {
             if(k%2!=0)
               {
                 p=p-n; 
                 q=q-m;
                 printf("the %d times number ofshangren is: %d,suicong:%d\n",k,p,q);
                 k=k+1; /*k表示第k次渡船数(从此岸到彼岸或从彼岸到此岸为一次)*/
               }
             if(k%2==0)
               {
                 p=p+n;
                 q=q+m;
                 printf("the %d times number ofshangren is: %d,suicong:%d\n",k,p,q);
                 k=k+1;
                }
             }
         else continue;
       }
}
}
getch();
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册