【问题标题】:Could someone tell me why the program does not return any int k in the end? [closed]有人能告诉我为什么程序最后没有返回任何 int k 吗? [关闭]
【发布时间】:2016-05-12 15:59:41
【问题描述】:

我正在做这个练习:给出一个由 n 个整数组成的序列,每个整数不大于 1000(按绝对值)。编写程序除数,找出给定整数中有多少具有以下性质:整数被 m 个正除数整除(每个除数不应等于 1,或整数本身)。

结果应如下所示: 输入:7 4
6 20 12 64 1024 50 24
输出:3
解释:给定序列的元素正好有 4 个除数,分别是 20、12 和 50。

这是我的代码:

#include <iostream>

using namespace std;

bool divisors(int a, int m) {
    int br = 0;
    for (int i = 2; i < a; ++i) {
        if (a % i == 0)br++;
        if (br == m) return 1;
        else return 0;
    }


}

int main() {
    int n; // the number of elements
    int m; // the number of divisors
    int a, i, k = 0;

    cin >> n >> m;


    for (i = 1; 1 <= n; i++) {
        cin >> a;
        if (divisors(a, m)) k++;
    }

    cout << k << endl;

    return 0;
}

【问题讨论】:

  • 你的意思是它不打印任何东西,或者它不打印你期望的东西,或者当你明确写return 0时你希望它实际上是return k,还是别的什么?
  • 它实际上不打印任何东西:/
  • 基本上 k 应该返回 4,如果你运行我在介绍中写的示例输入
  • 50 完全可以被 4 整除?真的吗?
  • @SagarPatel 别傻了! :) 50 正好有 4 个除数:2、25、10、5。

标签: c++ algorithm boolean


【解决方案1】:
for (i = 1; i <= n; i++) { // You want to compare with i, not with 1
    cin >> a;
    if (divisors(a, m)) k++;
}

【讨论】:

  • 是的,我想知道布尔部分出了什么问题,非常感谢! :D 现在这是正确的解决方案:#include using namespace std; bool divisors(int a, int m) { int br = 0; for (int i = 2; i > n >> m; for (i = 1; i > a;如果(除数(a,m))k++; } cout
【解决方案2】:
  • 主要问题在于您的 devisor 函数。像这样更新它,

    bool divisors(int a, int m) 
    {
       int br = 0;
       for (int i = 2; i < a; ++i)
       {
          if (a % i == 0)br++;
       }
       if (br == m) return 1;
          else return 0;
    }
    
  • 您在 for 循环完成之前从函数返回。

【讨论】:

  • 由于某种原因,具体情况似乎没有任何区别,但也会更新这部分,谢谢! :D
  • 在你当前发布的代码中,如果你用括号运行 for 循环,那么它总是给出零结果。
  • ahh 是的,显然我已经修改了它,在运行 Viktor 的注释之前将括号更改为 for (int i = 2; i
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-14
  • 2020-12-25
  • 2021-04-20
  • 1970-01-01
相关资源
最近更新 更多