我的 fizzbuzz 代码遇到错误

I am encountering an error with my code for fizzbuzz

#include <iostream>
using namespace std;

int f[33] = {3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 
             57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99};

int b[20] = {5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 
             90, 95, 100};


int main (){

  for (int x=100; x >= 1; x-- ){

    if (x == f){
        cout << "fizz" << endl;
    } else {
        if(x ==b){
            cout << "buzz" << endl;
        }else{
            if(x==f & x==b){
                cout << "fizzbuzz" << endl;

            }else{
                cout << x << endl;
            }
        }
    }
  }
}

我还在学习,所以这可能不是解决这个问题的最好方法。我只想知道这段代码有什么问题。谢谢

x 是一个 int,而 f 是一个数组。你不能这样比较它们:

if (x == f){

如果你的技术是检查 x 是否在数组 f 中,我建议你必须检查 f 中的每个值,例如

 if(x == f[i++]){

其中 i 是用于遍历 f 数组的索引。

此外,您可以考虑在 fb 中评估 x 的状况,然后再对其进行单独评估。

x 是整数,而 f 和 b 是整数数组。如果您想测试变量 x 的内容在数组 f 和 b 中的成员资格,您可能想定义自己的函数来检查它。

int is_in(int item, int[] list){
    for(i = 0; i < sizeof(list) / sizeof(struct list); i++){
        if(item==list[i]) return 1;
    }
    return 0;
}

然后将您的条件更改为if(is_in(x,b))

您的代码的错误是您无法比较整数和指针,您试图做的是查找 x 是否在 f 中或 x 是否在 b 中或两者。 但是为什么你必须这样做,你知道管理集合 f 和 b 的属性只是“%3==0”,“%5==0”。所以你可以做一些非常简单的事情,比如

 #include <iostream>
using namespace std;

int main (){

for (int x=100; x >= 1; x-- ){
if(x%3==0)        cout<<"Fizz";
if(x%5==0)        cout<<"Buzz";
else if(x%3 !=0)  cout <<x;
 cout<<endl;
}

}

正如其他人所指出的,您已经在数组中预先计算了 3 和 5 的倍数,但随后在 int 和这些数组之间进行直接比较——这总是会失败 (ISO C++ forbids comparison between pointer and integer)。如果您坚持使用预先计算的数组,则可以使用 std::find or std::any_of 检查任一数组是否包含当前数字。

但是,如果您还在代码中包含有关如何确定数字是否可被 3 或 5 整除的知识,而不是预先填充 3 和 5 的倍数,您可能会获得更多可信度。这已完成使用模运算符 %。任何 number % x 将 return 为零,如果它可以自然地被 x 整除。

您的代码中还有另一个逻辑缺陷。为了同时被 3 和 5 整除(即 15,因为 3 和 5 都是素数),您需要更改检查的优先顺序,以便首先完成 15 的检查,否则您将永远无法达到fizbuzz 分支(因为 3 和 5 分支也会被击中,而不是)。

Fizzbuzz 通常从 1 到 100 递增,但这里是您原来的 'count down' fizzbuzz 重写:

for (int x=100; x >= 1; x--){
   bool isDiv3 = x % 3 == 0;
   bool isDiv5 = x % 5 == 0;
   if (isDiv3 && isDiv5){
      cout << "fizzbuzz" << endl;
   } else if (isDiv5) {
      cout << "buzz" << endl;
   } else if (isDiv3) {
      cout << "fizz" << endl;
   } else {
       cout << x << endl;
   }
}

也可以消除其中一个 if 分支,方法是 运行 打印的 fizzbuzz 以 15 的比例相互融合,尽管这不一定是易于阅读:

for (int x=100; x >= 1; x--){
   bool isDiv3 = x % 3 == 0;
   bool isDiv5 = x % 5 == 0;
   if (isDiv3) {
      cout << "fizz";
   } 
   if (isDiv5) {
      cout << "buzz";
   } 
   if (!isDiv3 && !isDiv5)
       cout << x;
   }
   cout << endl;
}