UVA:489 刽子手游戏

题意:

         给定两个字符串,第一个串是用来匹配的,从第二个串的第一个字符开始匹配,如果第二个串中的字符在第一个串出现,则表示猜中了,第一个串中的相同的所有字符都算被猜中;如果没有出现则表示猜错,同样的猜错只算一次。在整个匹配的过程中,如果在还没猜错7次之前,第一个串中所有的字符都被猜完了, 则输出“You win.”,如果你还没全部猜完的时候就已经猜错7次,则输出“You lose.”。如果整个匹配过程结束后,你没赢也没输,则输出“You chickened out.”。

解题:

           分为三个函数,一个是主程序负责输入,一个是输出函数负责输出打印,一个是判断函数负责判断游戏

           游戏判断:一旦猜错7次则输掉游戏,而在7次之前,如果需要猜的词已经结束则赢得游戏,如果还没结束且玩家已经结束输入则放弃游戏。

注意:在这个程序中一个注意事项就是怎样算赢、怎样算输、怎样算弃权,判断时必须考虑清楚


#include <stdio.h>
#include <iostream>
#include <string>
using namespace  std;
//成功
void print(int t,int win){//输出打印结果
    if(win==0){
        cout<<"Round "<<t<<endl;
        cout<<"You win."<<endl;
    }else if(win==1){
        cout<<"Round "<<t<<endl;
        cout<<"You chickened out."<<endl;
    }else if(win==2){
        cout<<"Round "<<t<<endl;
        cout<<"You lose."<<endl;
    }
}
void test(int n,string a,string b){//判断
    bool c[a.size()];
    for(int i=0;i<a.size();i++){//使用bool数组判断字符是否已经猜过
        c[i]=true;
    }
    int count=0;
    bool flag=false;
    int j=0;
    while(true){
        for(int i=0;i<a.size();i++){
            if(b[j]==a[i]&&c[i]){
                c[i]=false;
                flag=true;
            }
        }
        if(!flag){//如果输入的字符没有一个匹配,则猜错加一
            count++;
        }
        flag=false;
        j++;
        if(count>6){//如果猜错次数大于6,不过此时是否输入结束都输掉游戏
            print(n,2);
            return;
        }
         bool f=true;
        for(int i=0;i<a.size();i++){
            if(c[i])f=false;
        }
        if(f){//如果需要猜的单词已经截止,没有需要猜的位,则赢得游戏
            print(n,0);
            return;
        }else
        if(j==b.size()){//如果有单词还没猜中,且已经输入结束,则放弃游戏
                print(n,1);
                return;
        }

    }
        return;
}
int main(){
    int n;
    cin>>n;
    string c,w;
    while(n!=-1){//输入
        cin>>c>>w;
        test(n,c,w);
        cin>>n;
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值