OginoChihiro 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条回答 默认 最新

  • OginoChihiro 2017-07-31 11:16
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!