|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
这个程序为什么不对。
#include <iostream>
#include <string>
using namespace std;
int a[100005];
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 = 99999; i >=0; i--)
        {
                a[yuan(i + 1)] = i;
        }
        cout << a[n-1];
        return 0;
}
这个求最小生成元,即如果x加x的各位和等于y,则x是y的最小生成元。
问题出在循环的范围上。在main函数中,循环的范围应该是从0到99999,而不是从99999到0。因为在yuan函数中,当n为1时,它的最小生成元是0,所以a[1]应该等于0。而在当前的代码中,a[1]被赋值为99999,这是不正确的。
修正后的代码如下:
- #include <iostream>
- #include <string>
- using namespace std;
- int a[100005];
- 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[yuan(i + 1)] = i;
- }
- cout << a[n-1];
- return 0;
- }
复制代码
|
|