0

这是代码背后的动机。有一个男孩叫鲍勃,今天是他的生日。他邀请了 50 位朋友过来,但并非所有朋友都想给他买礼物。Bob 收到了 50 份礼物,尽管其中一些是空的。他的好朋友告诉他关闭每个第二个盒子。对于每三个盒子,他应该将每一个封闭的变为开放的,每一个开放的变为封闭的。他继续对每个 n 小于 50 的第 n 个盒子执行此操作。最后打开的盒子将有礼物。

这应该可以帮助我为我的数学课找出一个问题,但我不知道 C++ 编程的所有复杂方面。我希望我的字符串 getValue(vector &arr) 返回一个数组/向量。此代码无法编译,但它显示了我正在尝试做的事情。

#include <iostream>
#include <vector>
#include<algorithm>

using namespace std;
string getValue(vector<string> &arr);

int main()
{
  vector<string> myArr(2);
  vector<string> newArr(2);

  for(int i=2; i <= 50; i++)
  {
    if(i%2==0)
    {
        myArr.push_back("close");
    }
    else
    {
        myArr.push_back("open");
    }
}

newArr = getValue(myArr);

 for(int i=2; i <=50; i++)
 {
    cout << i << " " << newArr[i] << endl;
 }

}

string getValue(vector<string> &arr)
{

 for(int i=2; i <=50; i++)
 {
    if(arr[i]=="close")
    {
      arr[i]="open";
    }
    else if(arr[i]=="open")
    {
      arr[i]="close";
    }

 }

   return arr;

}
4

4 回答 4

0

对于语法部分:-

  1. 函数的返回类型是字符串。将其更改为矢量以使您的功能正常工作。

  2. 您可以简单地全局声明向量。这将消除将其传递给函数并返回它的需要。

对于逻辑部分: -

您的问题是 Bob 每三个盒子切换一次,但在您的程序中,Bob 将每个盒子更改为打开,如果它关闭,每个盒子都关闭,如果它打开。如果您在问题中写的内容是正确的,那么您的代码应该是这样的。

#include <iostream>
#include <vector>

using namespace std;

void getValue();
vector<string> myArr(2);

int main()
{

  for(int i=2; i <= 50; i++)
  {
    if(i%2==0)
    {
        myArr.push_back("close");
    }
    else
    {
        myArr.push_back("open");
    }
}

getValue();

 for(int i=2; i <=50; i++)
 {
    cout << i << " " << myArr[i] << endl;
 }

}

void getValue()
{

 for(int i=3; i <=50; i+=3)
 {
    if(myArr[i]=="close")
    {
      myArr[i]="open";
    }
    else if(myArr[i]=="open")
    {
      myArr[i]="close";
    }
 }
}
于 2013-09-08T23:37:05.883 回答
0

getValue()通过引用将向量传递到其中,这意味着您在该函数中对其进行的更改将影响原始向量(换句话说,您不是在对向量的副本进行操作 - 您实际上是在对向量进行操作) .

所以你不需要从那里返回任何东西getValue()——只要做它void,它就应该做你想做的事。

于 2013-09-08T23:17:54.053 回答
0

string getValue(vector &arr) - 返回类型是字符串,而不是向量。您需要更改其返回类型或将其设置为无。

PS: newArr = getValue(myArr); 它在 SCOPE 后面并且位置错误...该死的,第三个 PS,分配了错误的代码规则

于 2013-09-08T23:19:59.680 回答
0

你不能让你的string getValue(vector<string> &arr)返回一个数组/向量。它只能返回一个string. 如果你想让一个函数返回一个数组/向量,那么你必须在函数签名中这样说。

于 2013-09-08T23:20:05.013 回答