初学者。
练习是创建一个输入的函数,如果输入是偶数,则进行一定的计算。如果是奇数,则进行计算。然后重新分配新值,序列继续,直到达到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;
}
答案 0 :(得分:1)
您没有收到hailstone()
返回的内容。
这样做:
counter = hailstone(outinput);
在方法hailstone
中,您可以在不初始化的情况下增加counter
。这将导致您获得未定义的行为。
在方法counter
hailstone
int counter = 0;
最后你的for循环终止条件:outinput == 1
是错误的。此条件意味着仅当outinput
为1
时,循环才会迭代。使用outinput != 1
表示您循环将迭代,直到outinput
变为1
。
答案 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循环完成的迭代次数)。
您还需要确保在使用其值之前初始化变量。