回 帖 发 新 帖 刷新版面

主题:第72次编程比赛结果

我浏览一次后,还没打算编译测试前,已经决定好了谁是冠军了,
因为除了那一份代码有测试的价值外,其它的我已经没有兴趣去试验了

不过,有点可惜的是,冠军的代码和我自己的代码效率差别不大
偶也想看看n<=30有15%左右提升,n>39有一倍提升的代码,能发上来看看吗?
顺便可以的话你说明你优化了些什么

PS.前两天有点忙,搞得忘记来结帖了。。。

回复列表 (共24个回复)

21 楼

[quote]这次错过了。刚刚看了下题,想到一个方法。宽搜

节点定义的方式是
struct node
{
int currentvalue;//扩展到当前位的值
int sum;//扩展到当前位的各位数的n次方和
};

初始化的时候,把一位的情况放到队列里面(不包括0),然后扩展一个节点后面添加位数0---k-1.
剪枝条件为current*k > sum+(k-1)^n;

实现方式非常简单,不知道效率怎么样。[/quote]

你这个要考虑的不是效率,而是空间,你够用么?

22 楼

这么复杂的程序

23 楼

我认为这个题目的处理要考虑以下两点:
一:
n次k进制的水仙花数的最大值的位置(大概),例如4次10进制的,由于9的4次方是6561这样找到10000就差不多足够了。
二:
由于实际判断的数是慢慢递增的,而水仙花数的判断条件是幂方增加的,举个例子这样能说清楚:以4次10进制为例,1~9这组数只要算到2就行了,因为2的4次方是16>2;10~19这组数只要算到12就行了,因为1+16>12;20~19这组数只要算到22就行了,因为16+16>22;应该很清楚了吧。


这样应该能加快计算,我也挺喜欢编程的,但暂时还自己没有电脑,所以只能提点建议。等以后有条件了,再和大家切磋切磋。

24 楼

[quote]我认为这个题目的处理要考虑以下两点:
一:
n次k进制的水仙花数的最大值的位置(大概),例如4次10进制的,由于9的4次方是6561这样找到10000就差不多足够了。
二:
由于实际判断的数是慢慢递增的,而水仙花数的判断条件是幂方增加的,举个例子这样能说清楚:以4次10进制为例,1~9这组数只要算到2就行了,因为2的4次方是16>2;10~19这组数只要算到12就行了,因为1+16>12;20~19这组数只要算到22就行了,因为16+16>22;应该很清楚了吧。


这样应该能加快计算,我也挺喜欢编程的,但暂时还自己没有电脑,所以只能提点建议。等以后有条件了,再和大家切磋切磋。[/quote]

你继续考虑吧,还远不足

我来回复

您尚未登录,请登录后再回复。点此登录或注册