我的Bulls and Cows项目几乎完成了,但是,如果我输入一个单词或一个带有字母或数字重复的数字序列,那么代码的“牛”部分就会弄乱。 例如:考虑以下

输入您想让别人猜的东西:很酷

是时候猜了! 代码的大小为4。

牛:0公牛:2

OZZO

牛:4牛:0

如您所见,输入“ ozzo”后,母牛的值应为2,而不是4。如何解决此问题而不必更改整个代码?

for (size_t i = 0; i != startg.getSize(); ++i){
    if (guess[i] == origWord[i]){
        bullCtr++;
    } else {
        for (size_t j = 0; j != startg.getSize(); ++j){
            if (origWord[i] == guess[j]){
                cowCtr++;
            }
        }
    }
}

应用修复后的代码:

for (size_t i = 0; i != startg.getSize(); ++i){
    if (guess[i] == origWord[i]){
        bullCtr++;
    } else {
        for (size_t j = 0; j != startg.getSize(); ++j){
            if (origWord[i] == guess[j]){
                origWord[i] = 'X';
                cowCtr++;
            }
        }
    }
    origWord = origWordcpy;
}

===============>>#1 票数:1 已采纳

您的母牛检查有问题。

为了方便(不完全是),我会这样做(我仅在谈论else语句):

for(unsigned int j = 0 ; j != startg.getSize() ; j++)
{
    if(origWord[i] == guess[j])
    {
         origWord[i] = 1; //Just assigning a certain value there to mark that we've already did something with it
         cowCtr++;
    }
}

那应该做的工作。

编辑:

您显然应该使用一个临时字符串而不是origWord因为更改它会影响外循环的下一次迭代(获得猜测并再次进行比较)-我只是向您展示了方式。

===============>>#2 票数:0

这是公牛游戏的一种可能的实现方式:

// used constants; numbers to be guessed
const int first_num = 2;
const int second_num = 4;
const int third_num = 1;
const int forth_num = 5;

int main(){
// vector holding the values to be guessed
vector<int>gamenum(4);
gamenum[0] = first_num;
gamenum[1] = second_num; 
gamenum[2] = third_num;
gamenum[3] = forth_num;

// prompt message; input cycle till perfect guess (4 bulls)
int bulls = 0;
while (!(bulls == 4)){
    // vector holding the guesses
    vector<int>guesses;
    // vector input values
    int guess1(0), guess2(0), guess3(0), guess4(0);

    cout << "\t\tPlay the game ""Bulls and Cows\n""" << endl;
    cout << "Enter a set of four numbers, separated by whitespace space: ";
    cin >> guess1 >> guess2 >> guess3 >> guess4;
    guesses.push_back(guess1);
    guesses.push_back(guess2);
    guesses.push_back(guess3);
    guesses.push_back(guess4);

    // input confirmation; show your guess
    cout << "\nYour guess is: ";
    for (int i = 0; i < guesses.size(); ++i){
        cout << guesses[i];
    }

    // bulls criterion
    for (int j = 0; j < guesses.size(); ++j){
        if (guesses[j] == gamenum[j]) ++bulls;
    }

    // cows criterion
    int cows = 0;
    for (int gue = 0; gue < guesses.size(); ++gue){
        for (int gam = 0; gam < gamenum.size(); ++gam){
            if (guesses[gue] == gamenum[gam] && gue != gam) ++cows;
        }
    }

    // print result
    if (bulls < 4){
        cout << "\nBulls: " << bulls << " and Cows: " << cows <<endl;
        cout << "\n\n\n" << endl;
        // reset bulls
        bulls = 0;
    }

    // empty guesses vector
    guesses.clear();
    // reset cows
    cows = 0;
}
// print success
cout << "\nPerfect Guess!" << endl;
cout << "Bulls: " << bulls << endl;
cout << "\n\n\n" << endl;

keep_window_open();
return 0;
}

无论如何,这都不是最优的,但可以正常工作。 您可以将其用作基准。

  ask by Ishaan translate from so

未解决问题?本站智能推荐:

1回复

Qt项目结构

我想在Qt-Creator中构建我的项目,如下所示: 我尝试通过创建像这样的项目和包含文件来实现这一点: main.pro subproject.pro 现在发生的是,subsubincludes文件夹包含在MainProject而不是SubProject中,如下所
1回复

用clang ++编译大型项目

我目前正在使用多个.cpp和.h文件的c ++项目。 虽然我可以使用 例如,许多类都依赖于其他类,因此我最终编译了包括多个对象在内的多个文件,这些文件也包含在其他多个编译中。 我也使用typedef 在几个地方,这意味着它必须包含在多个文件中,是否有更整洁/更好的方法呢?
1回复

包括没有项目的图书馆

我已经创建了一个具有某些功能的库,现在我想在创建代码块或dev c ++项目时使用它,但是似乎在此模式下不起作用。 我只希望有main.cpp,lib.he lib.cpp文件,并且能够正确编译包括库的main.cpp,但是现在它给我提供了库中每个函数未定义引用的错误。 有可能吗?如何?
4回复

如何将大型MFC项目拆分为较小的项目

我们有一个大型的MFC / C ++ Visual Studio 2005解决方案,该解决方案当前包含两个项目: 代码(大约1500个.h / .cpp文件,动态链接到MFC) 资源DLL(我们使用外部工具来翻译资源) 我们有哪些选项(lib,dll等)? 我们从哪里
2回复

Xcode:从Objective-C项目引用C ++项目

我开始为此扯头发,所以是时候在这里发布了! 我在XCode中有一个C ++项目,它是作为命令行工具构建的。 所有.cpp文件都已重命名为.mm,其中有一个.hh和几个.h标头。 我在构建设置中指定了“将源编译为-> Objective-C ++”。 我还有一个适用于iOS应
2回复

如何创建Visual Studio 2008 C ++项目模板?

我已经多次为C#,ASP.NET,WinForms等项目使用“导出模板”功能。 今天我尝试为C ++项目做这件事,并注意到“导出模板”在文件菜单中显示为灰色。 是不是可以在VS 2008中创建C ++模板项目?
1回复

带有子文件夹的Eclipse C ++项目

我用C ++解决了很多LeetCode问题。 我在Eclipse中工作,想要创建一个文件结构,如: 我希望每个solution.cpp文件都独立于所有其他解决方案文件运行... 但每当我在项目中创建一个子文件夹并在其中放置一个cpp文件时,项目就会停止构建并且无法运行。 例如,
2回复

C ++在多个项目中包含一个类

我希望使一个类包含在我的所有项目中,以便当我进行更改时,它从该文件的副本在所有项目中进行更新。 例如: foo.h foo.cpp main.cpp 如何轻松地将“ foo.h”包含到多个项目中?
1回复

将图像和文件包含到项目中

我有一些图像是从某些路径C:/ .... png加载的,以在用户界面中显示它们,还有一个我想插入而无需指定路径的文件 我试图将图像包含在项目中,并直接访问它们而不指定其地址,特别是因为我可以在许多机器上工作,并且我不想每次都更改路径,而是再次创建文件夹和图像。 没用! 我使用QPi
1回复

如何使用Visual Studio创建源外树项目?

我使用解决方案资源管理器中的“ Show All Files功能,该应用程序以镜像文件系统的文件夹结构显示项目文件,而不是使用Visual Studio的筛选器。 我的目标是在源树之外创建一个Visual Studio项目,该项目仍在目录结构中列出文件。 到目前为止,我所做的是在下面显示