黎子卿 发表于 2023-11-22 17:17:28

最小生成元

这个程序为什么不对。
#include <iostream>
#include <string>
using namespace std;
int a;
int yuan(int n)
{
        string strn;
        int res = 0;
        strn = to_string(n);
        for (int i = 0; i < strn.length(); i++)
        {
                res = res + strn - '0';
        }
        return n + res;
}
int main()
{
        int n;
        cin >> n;
        for (int i = 99999; i >=0; i--)
        {
                a = i;
        }
        cout << a;
        return 0;
}
这个求最小生成元,即如果x加x的各位和等于y,则x是y的最小生成元。

isdkz 发表于 2023-11-22 17:17:49

问题出在循环的范围上。在main函数中,循环的范围应该是从0到99999,而不是从99999到0。因为在yuan函数中,当n为1时,它的最小生成元是0,所以a应该等于0。而在当前的代码中,a被赋值为99999,这是不正确的。

修正后的代码如下:

#include <iostream>
#include <string>
using namespace std;
int a;
int yuan(int n)
{
    string strn;
    int res = 0;
    strn = to_string(n);
    for (int i = 0; i < strn.length(); i++)
    {
      res = res + strn[ i] - '0';
    }
    return n + res;
}
int main()
{
    int n;
    cin >> n;
    for (int i = 0; i < 100000; i++)
    {
      a = i;
    }
    cout << a;
    return 0;
}
页: [1]
查看完整版本: 最小生成元