C ++函数练习 - 保持返回零

时间:2015-07-18 20:20:12

标签: c++ loops c++11 reference

初学者。

练习是创建一个输入的函数,如果输入是偶数,则进行一定的计算。如果是奇数,则进行计算。然后重新分配新值,序列继续,直到达到1。

实施例: 如果起始整数为1,则返回值应为0,因为它不需要步骤即可达到1。如果起始整数为3,则序列将为:3,10,5,16,8,4,2,1,返回值应为7.

几个小时以来一直在搞这个,我不断从柜台拿回0。

(main()仅用于测试目的)

由于

#include <iostream>

using namespace std;

int hailstone(int outinput);

int main()
{
  int outinput=10, counter;

  hailstone(outinput);

  cout << counter << endl;

  return 0;
}

int hailstone(int outinput)
{
  int counter;

  for(outinput; outinput == 1; )
  {
    if(outinput % 2 == 0)
    {
      outinput = outinput / 2;
      counter++;
    }
    else if(outinput % 2 != 0)
    {
      outinput = outinput * 3 + 1;
      counter++;
    }
  }

  return counter;
}

2 个答案:

答案 0 :(得分:1)

您没有收到hailstone()返回的内容。

这样做:

counter = hailstone(outinput);

在方法hailstone中,您可以在不初始化的情况下增加counter。这将导致您获得未定义的行为。

在方法counter

中初始化hailstone
int counter = 0;

最后你的for循环终止条件:outinput == 1是错误的。此条件意味着仅当outinput1时,循环才会迭代。使用outinput != 1表示您循环将迭代,直到outinput变为1

Live run here.

答案 1 :(得分:0)

您需要将hailstone的返回值存储到变量或cout << hailstone(outinput) << endl;

#include <iostream>
using namespace std;

int hailstone(int outinput);

int main(){
    int outinput=10, counter;
    counter = hailstone(outinput); // You need to put the return value of hailstorm into a variable
    cout << counter << endl;
    return 0;
}

int hailstone(int outinput){
    int iterations = 0;             // You need to initialize counter to 0
    while (outinput != 1){          // you had the wrong condition. (your's ran only when outinput equals 1. You wanted the opposite). Also a while loop works better in this case.
        ++iterations;
        if(outinput % 2 == 0){
            outinput = outinput / 2;
        } else if(outinput % 2 != 0) {
            outinput = outinput * 3 + 1;
        }
    }
    return ++iterations;
}

冰雹中的计数器与主体中的计数器不同。为了更加清晰,我将hailstorm中的计数器变量更改为命名迭代(IE为for / while循环完成的迭代次数)。

您还需要确保在使用其值之前初始化变量。