「已注销」 2017-07-31 09:59 采纳率: 0%
浏览 1687

acm 2005 生成元问题 给出n(1≤n≤100000),求最小生成元。无解输出0

#include
#include
const int maxn = 100000 + 5;
int ans[maxn];
void solve() //离线做法
{
memset(ans, 0, sizeof(ans));
for (int i = 1; i < maxn; i++)
{
int x = i, y = i;
while (x)
{
y += x % 10;
x /= 10;
}
if (ans[y] == 0 || i < ans[y]) //请问这句能否改为if (ans[y] == 0)即去掉后面的判断条件,如果不能,能否找个特例?感谢大神的帮助!!!
ans[y] = i;
}
}
int main()
{
int T, n;
solve();
scanf("%d", &T);
while (T--)
{
scanf("%d", &n);
printf("%d\n", ans[n]);
}
}

  • 写回答

4条回答 默认 最新

  • 「已注销」 2017-07-31 11:16
    关注

    基本的想法我能看懂,就是我注释的那行我不太懂,ans[y]初值为零的时候肯定小于i,那个i会不断变大,所以ans[y]已经得到赋值的时候肯定会小于i,即后面的判断语句(||i < ans[y])肯定是false,也就是可以省略掉,请问我这个想法对不对呢?

    评论

报告相同问题?