标题: 奥数选拔题, 很有意思,看出门道的话并不是很难。
性别:未知-离线 fantasydog
(codering)

Rank: 4
组别 士兵
级别 牙门将军
功绩 6
帖子 567
编号 42708
注册 2005-7-9


发表于 2008-2-16 13:58 资料 短消息 看全部作者
机算了下,412个。
除去x,z都等于0的71个,还有……341个。
奥数有时间的吧……且这个东西要是写在试卷上,能写完么?
————————————————————————————————————
式子列错了…………

貌似有5457组啊。颇夸张了点
---------------------------------------------------------------------------------------------------
天哪,我写程序的能力骤然衰减……居然又错了
---------------------------------------------------------------------------------------------------
小帖一下程序,下班回去再研究:

package fd.misc;

public class Math1 {
        private static final int LIMIT_LOW = 0;

        private static final int LIMIT_HI = 70;

        static int x, y, z;

        /**
         * @param args
         */
        public static void main(String[] args) {
                int count = 0;

                for (x = LIMIT_LOW; x <= LIMIT_HI; x++) {
                        for (y = LIMIT_LOW; y <= LIMIT_HI; y++) {
                                for (z = LIMIT_LOW; z <= LIMIT_HI; z++) {
                                        double result = getResult();

                                        if (result % 71 == 0) {
                                                System.out.println("x=" + x + ",y=" + y + ",z=" + z);
                                                count++;
                                        }
                                }
                        }
                }

                System.out.println(count);
        }

        private static double getResult() {
                return getUnit(13, 2, 1, 0) + getUnit(4, 4, 0, 3) + getUnit(5, 3, 5, 6)
                                + getUnit(3, 0, 7, 16);
        }

        private static double getUnit(int n, int xn, int yn, int zn) {
                return n * Math.pow(x, xn) * Math.pow(y, yn) * Math.pow(z, zn);
        }
}

[ 本帖最后由 fantasydog 于 2008-2-16 14:29 编辑 ]


顶部
性别:未知-离线 fantasydog
(codering)

Rank: 4
组别 士兵
级别 牙门将军
功绩 6
帖子 567
编号 42708
注册 2005-7-9


发表于 2008-2-16 16:35 资料 短消息 看全部作者
5083是对的。
double太大时,模一个比较小的数就模不出来了。
修改后:
package fd.misc;

public class Math1 {
        private static final int LIMIT_LOW = 0;

        private static final int LIMIT_HI = 70;
       
        private static final int MAGIC_NUM = 71;

        static int x, y, z;

        /**
         * @param args
         */
        public static void main(String[] args) {
                int count = 0;

                for (x = LIMIT_LOW; x <= LIMIT_HI; x++) {
                        for (y = LIMIT_LOW; y <= LIMIT_HI; y++) {
                                for (z = LIMIT_LOW; z <= LIMIT_HI; z++) {
                                        double result = getResult();

                                        if (result % 71 == 0) {
                                                System.out.println("x=" + x + ",y=" + y + ",z=" + z);
                                                count++;
                                        }
                                }
                        }
                }

                System.out.println(count);
        }

        private static double getResult() {
                return getUnit(13, 2, 1, 0) + getUnit(4, 4, 0, 3) + getUnit(5, 3, 5, 6)
                                + getUnit(3, 0, 7, 16);
        }

        private static double getUnit(int n, int xn, int yn, int zn) {
                return n * pow(x, xn) * pow(y, yn) * pow(z, zn);
        }

        private static int pow(int x2, int xn) {
                int result = 1;
                for(int i=0;i<xn;i++) {
                        result = result * x2;
                       
                        result %= MAGIC_NUM;
                }
                return result;
        }
}

PS:对这类问题结构化就够了吧,难道用topcoder的模式写?

[ 本帖最后由 fantasydog 于 2008-2-16 16:40 编辑 ]


顶部

正在浏览此帖的会员 - 共 1 人在线




当前时区 GMT+8, 现在时间是 2025-8-25 11:36
京ICP备2023018092号 轩辕春秋 2003-2023 www.xycq.org.cn

Powered by Discuz! 5.0.0 2001-2006 Comsenz Inc.
Processed in 0.009421 second(s), 9 queries , Gzip enabled

清除 Cookies - 联系我们 - 轩辕春秋 - Archiver - WAP