2021-07-14

c语言商人过河问题最终版****#include"stdio.h"#include"stdlib.h"void yxgz(){ printf(“游戏规则:”); printf(" 有三个商人带着三个随从和货物过河,船每次最多只能载两个"); printf(“人,由他们自己划行,并且如何乘船渡河的大权由商人掌握。要求保”); printf(“证在过河期间的任一岸上商人的人数要大于或等于随从的人数,否则”); printf(“随从会杀死商人抢走货物。”); printf(“注意:只有一条船”); printf("\n");}void began(){ char ch[1]; printf(“按Q开始游戏”); scanf_s("%s", &ch, 1); if (ch == ‘Q’ || ch == ‘q’) exit(0);}void xianshi(char* a, char* b){ int ax = 0, ay = 0, bx = 0, by = 0; int i; for (i = 0; i < 6; i++) { if ((a + i) == ‘M’) ax++; if ((a + i) == ‘S’) ay++; if ((b + i) == ‘M’) bx++; if ((b + i) == ‘S’) by++; } printf(“河岸边\n”); for (i = 1; i <= ax; i++) printf(“商人 “); printf(”\n”); for (i = 1; i <= ay; i++) printf(“仆人 “); printf(”\n”); printf("——————————————"); printf("\n\n"); printf("——————————————"); printf("\n"); printf(“河对岸\n”); for (i = 1; i <= bx; i++) printf(“商人 “); printf(”\n”); for (i = 1; i <= by; i++) printf(“仆人 “); printf(”\n\n”);}int pan(int ax, int ay, int bx, int by){ if (ax < ay || bx < by) { if ((ax == 0 && bx != 0) || (ax != 0 && bx == 0)) return 1; else { printf(“商人死了,游戏结束。\n”); return 0; } } if (ax == 0 && ay == 0 && bx == 3 && by == 3) { printf(“恭喜过关!\n”); return 0; } else return 1;}int main(){ int i, x = 0, y = 0, n = 0, z=1; int ax = 3, ay = 3, bx = 0, by = 0; char a[6], b[6]; yxgz(); began(); for (i = 0; i < 3; i++) a[i] = ‘M’; for (i = 3; i < 6; i++) a[i] = ‘S’; for (i = 0; i < 6; i++) b[i] = ‘0’; xianshi(a, b); while (z == 1) { n = n + 1; printf(“请输入第%d次过河的商人数:”, n); scanf_s("%d", &x); while (x < 0 || x>2) { printf(“错误,重新输入:”); scanf_s("%d", &x); } printf(“请输入第%d次过河的仆人数:”, n); scanf_s("%d", &y); while (y < 0 || y>2 || x + y > 2) { printf(“错误,请重新输入:”); scanf_s("%d", &y); } ax = ax - x; ay = ay - y; bx = bx + x; by = by + y; pan(ax, ay, bx, by); for (i = 0; i < 6; i++) { a[i] = ‘0’; b[i] = ‘0’; } for (i = 0; i < ax; i++) a[i] = ‘M’; for (i = 3; i < 3 + ay; i++) a[i] = ‘S’; for (i = 0; i < bx; i++) b[i] = ‘M’; for (i = 3; i < 3 + by; i++) b[i] = ‘S’; xianshi(a, b); printf(“请输入第%d次返回时商人数:”, n); scanf_s("%d", &x); while (x < 0 || x>2) { printf(“错误,请重新输入:”); scanf_s("%d", &x); } printf(“请输入第%d次返回时仆人数:”, n); scanf_s("%d", &y); while (y < 0 || y>2 || x + y > 2) { printf(“错误,请重新输入:”); scanf_s("%d", &y); } ax = ax + x; ay = ay + y; bx = bx - x; by = by - y; z=pan(ax, ay, bx, by); for (i = 0; i < 6; i++) { a[i] = ‘0’; b[i] = ‘0’; } for (i = 0; i < ax; i++) a[i] = ‘M’; for (i = 3; i < 3 + ay; i++) a[i] = ‘S’; for (i = 0; i < bx; i++) b[i] = ‘M’; for (i = 3; i < 3 + by; i++) b[i] = ‘S’; xianshi(a, b); }}
#include"stdio.h"
#include"stdlib.h"
void yxgz(){ printf(“游戏规则:”);
printf(" 有三个商人带着三个随从和货物过河,船每次最多只能载两个");
printf(“人,由他们自己划行,并且如何乘船渡河的大权由商人掌握。要求保”);
printf(“证在过河期间的任一岸上商人的人数要大于或等于随从的人数,否则”);
printf(“随从会杀死商人抢走货物。”); printf(“注意:只有一条船”);
printf("\n");}void began(){ char ch[1]; printf(“按Q开始游戏”);
scanf_s("%s", &ch, 1);
if (ch == ‘Q’ || ch == ‘q’) exit(0);
}void xianshi(char* a, char* b)
{ int ax = 0, ay = 0, bx = 0, by = 0; int i; for (i = 0; i < 6; i++)
{
if ((a + i) == ‘M’) ax++;
if (
(a + i) == ‘S’) ay++;
if ((b + i) == ‘M’) bx++;
if (
(b + i) == ‘S’) by++; }
printf(“河岸边\n”);
for (i = 1; i <= ax; i++)
printf(“商人 “);
printf(”\n”);
for (i = 1; i <= ay; i++)
printf(“仆人 “);
printf(”\n”);
printf("——————————————"); printf("\n\n"); printf("——————————————"); printf("\n");
printf(“河对岸\n”);
for (i = 1; i <= bx; i++)
printf(“商人 “);
printf(”\n”);
for (i = 1; i <= by; i++)
printf(“仆人 “);
printf(”\n\n”);
}
int pan(int ax, int ay, int bx, int by)
{
if (ax < ay || bx < by)
{
if ((ax == 0 && bx != 0) || (ax != 0 && bx == 0)) return 1;
else
{
printf(“商人死了,游戏结束。\n”); return 0;
}
}
if (ax == 0 && ay == 0 && bx == 3 && by == 3) {
printf(“恭喜过关!\n”);
return 0; }
else return 1;}
int main()
{
int i, x = 0, y = 0, n = 0, z=1;
int ax = 3, ay = 3, bx = 0, by = 0;
char a[6], b[6];
yxgz();
began();
for (i = 0; i < 3; i++)
a[i] = ‘M’; for (i = 3; i < 6; i++)
a[i] = ‘S’; for (i = 0; i < 6; i++)
b[i] = ‘0’; xianshi(a, b);
while (z == 1)
{ n = n + 1;
printf(“请输入第%d次过河的商人数:”, n); scanf_s("%d", &x);
while (x < 0 || x>2)
{
printf(“错误,重新输入:”); scanf_s("%d", &x); }
printf(“请输入第%d次过河的仆人数:”, n); scanf_s("%d", &y);
while (y < 0 || y>2 || x + y > 2) { printf(“错误,请重新输入:”); scanf_s("%d", &y); } ax = ax - x; ay = ay - y; bx = bx + x; by = by + y; pan(ax, ay, bx, by);
for (i = 0; i < 6; i++)
{ a[i] = ‘0’; b[i] = ‘0’; }
for (i = 0; i < ax; i++) a[i] = ‘M’;
for (i = 3; i < 3 + ay; i++)
a[i] = ‘S’; for (i = 0; i < bx; i++) b[i] = ‘M’; for (i = 3; i < 3 + by; i++) b[i] = ‘S’; xianshi(a, b);
printf(“请输入第%d次返回时商人数:”, n); scanf_s("%d", &x);
while (x < 0 || x>2)
{
printf(“错误,请重新输入:”); scanf_s("%d", &x); }
printf(“请输入第%d次返回时仆人数:”, n); scanf_s("%d", &y);
while (y < 0 || y>2 || x + y > 2) { printf(“错误,请重新输入:”); scanf_s("%d", &y); } ax = ax + x; ay = ay + y; bx = bx - x; by = by - y; z=pan(ax, ay, bx, by);
for (i = 0; i < 6; i++)
{
a[i] = ‘0’; b[i] = ‘0’; }
for (i = 0; i < ax; i++) a[i] = ‘M’;
for (i = 3; i < 3 + ay; i++) a[i] = ‘S’;
for (i = 0; i < bx; i++) b[i] = ‘M’;
for (i = 3; i < 3 + by; i++) b[i] = ‘S’; xianshi(a, b); }}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值