第五届决赛试题

1、年龄巧合

小明和他的表弟一起去看电影,有人问他们的年龄。小明说:今年是我们的幸运年啊。我出生年份的四位数字加起来刚好是我的年龄。表弟的也是如此。已知今年是2014年,
并且,小明说的年龄指的是周岁。

请推断并填写出小明的出生年份。

这是一个4位整数,请通过浏览器提交答案,不要填写任何多余的内容(比如,他表弟的出生年份,或是他们的年龄等等)

代码:

/**
 * 年龄巧合
 * @description
 * @author zhangbiao
 * @time 2018-5-11 下午3:16:33
 */
public class Main01 {
    //答案:1988
    public static void main(String[] args) {
        for(int i=1900;i<2014;i++){
            if((2014-i)==f(i)){
                System.out.println(i);
            }
        }
    }
    //四位数相加的和
    public static int f(int s){
        String str=s+"";
        int num=0;
        char[] charArray = str.toCharArray();
        for(int i=0;i<charArray.length;i++){
            num=num+charArray[i]-'0';
        }
        return num;
    }
}

2、国王的遗产

X国是个小国。国王K有6个儿子。在临终前,K国王立下遗嘱:国王的一批牛作为遗产要分给他的6个儿子。
其中,大儿子分1/4,二儿子1/5,三儿子1/6,….
直到小儿子分1/9。
牛是活的,不能把一头牛切开分。

最后还剩下11头牛,分给管家。

请计算国王这批遗产中一共有多少头牛。

代码:

/**
 * 国王的遗产
 * @description
 * @author zhangbiao
 * @time 2018-5-11 下午3:31:56
 */
public class Main02 {
    //答案:2520
    public static void main(String[] args) {
        for(int i=10;i<=10000;i++){
            if(i%4==0&&i%5==0&&i%6==0&&i%7==0&&i%8==0&&i%9==0){
                if(i/4+i/5+i/6+i/7+i/8+i/9+11==i){
                    System.out.println(i);
                }
            }
        }
    }
}

3、海盗分金币

有5个海盗,相约进行一次帆船比赛。

比赛中天气发生突变,他们被冲散了。

恰巧,他们都先后经过途中的一个无名的荒岛,并且每个人都信心满满,觉得自己是第一个经过该岛的人。

第一个人在沙滩上发现了一堆金币。他把金币分成5等份。发现刚好少一个金币。他就从自己口袋拿出一个金币补充进去,然后把属于自己的那份拿走。

第二个到达的人也看到了金币,他也和第一个人一样,把所有金币5等分,发现刚好缺少一个金币,于是自己补进去一个,拿走了属于自己的那份。

第三,第四,第五人的情况一模一样。

等他们到了目的地,都说自己的情况,才恍然大悟,一起去荒岛找金币,然而再也没有找到荒岛。他们都惋惜地说:岛上还有一千多枚金币呢!

请你根据这些信息,推算荒岛上最初有多少金币?

代码:

/**
 * 海盗分金币
 * @description
 * @author zhangbiao
 * @time 2018-5-11 下午3:38:39
 */
public class Main03 {
    //答案:3129
    public static void main(String[] args) {
        int sum=0;
        int count=0;
        for(int i=3129;i<=3129;i++){
            if((i+1)%5!=0){
                continue;
            }
            sum=(i+1)*4/5;
            for(int j=0;j<4;j++){
                if((sum+1)%5!=0)
                    break;
                sum=(sum+1)*4/5;
                count++;
            }
            if(sum>1000&&sum<2000&&count==4){
                System.out.println(i);
                System.out.println(sum);
            }
            count=0;
        }
    }
}

4、出栈次序(记住公式)

X星球特别讲究秩序,所有道路都是单行线。一个甲壳虫车队,共16辆车,按照编号先后发车,夹在其它车流中,缓缓前行。

路边有个死胡同,只能容一辆车通过,是临时的检查站,如图【p1.png】所示。

X星球太死板,要求每辆路过的车必须进入检查站,也可能不检查就放行,也可能仔细检查。

如果车辆进入检查站和离开的次序可以任意交错。那么,该车队再次上路后,可能的次序有多少种?

为了方便起见,假设检查站可容纳任意数量的汽车。

显然,如果车队只有1辆车,可能次序1种;2辆车可能次序2种;3辆车可能次序5种。

现在足足有16辆车啊,亲!需要你计算出可能次序的数目。

这是一个整数,请通过浏览器提交答案,不要填写任何多余的内容(比如说明性文字)。

代码:

/**
 * 出栈次序(记住公式)
 * @description
 * @author zhangbiao
 * @time 2018-5-12 下午5:43:17
 */
public class Main04 {
    /**
     * 答案:35357670
     * 应用卡特兰数:f(n)=f(0)*f(n-1)+f(1)*f(n-2)+f(2)*f(n-3)+...+f(n-1)*f(0)
     * 其中:f(0)=f(1)=1
     * @param args
     */
    public static void main(String[] args) {
        System.out.println(f(16));
    }

    public static int f(int n){
        if(n==0||n==1){
            return 1;
        }else{
            int num=0;
            for(int i=0;i<n;i++){
                num=num+f(i)*f(n-i-1);
            }
            return num;
        }
    }
}

5、六角幻方

https://blog.youkuaiyun.com/shaonianbz/article/details/80294439

6、神奇6位数

有一个6位的正整数,它有个很神奇的性质:

分别用2 3 4 5 6去乘它,得到的仍然是6位数,并且乘积中所包含的数字与这个6位数完全一样!只不过是它们的顺序重新排列了而已。

请计算出这个6位数。

代码:

/**
 * 神奇6位数
 * @description
 * @author zhangbiao
 * @time 2018-5-12 下午8:09:50
 */
public class Main06 {
    //答案:142857
    public static void main(String[] args) {
        //由于用6去乘还是一个6位数,说明最高为是1
        String a2,a3,a4,a5,a6;
        for(int i=100000;i<199999;i++){
            a2=i*2+"";
            a3=i*3+"";
            a4=i*4+"";
            a5=i*5+"";
            a6=i*6+"";
            //将字符串转化为排好序的数组
            if(f(a2, i+"")&&f(a3,i+"")&&f(a4,i+"")&&f(a5,i+"")&&f(a6,i+"")){
                System.out.println(a2+"-"+a3+"-"+a4+"-"+a5+"-"+a6);
                System.out.println(i);
            }
        }
    }
    //判断两个字符串是否相等
    public static boolean f(String str1,String str2){
        if(str1.length()==str2.length()){
            char[] ch1 = str1.toCharArray();
            char[] ch2 = str2.toCharArray();
            Arrays.sort(ch1);
            Arrays.sort(ch2);
            for(int i=0;i<ch1.length;i++){
                if(ch1[i]!=ch2[i]){
                    return false;
                }
            }
        }
        return true;
    }
}

7、数字拆分

正整数可以表示为若干正整数的累加和。

如,对于正整数n=6,可以分划为:
6
5+1
4+2
4+1+1
3+3
3+2+1
3+1+1+1
2+2+2
2+2+1+1
2+1+1+1+1
1+1+1+1+1+1

现在的问题是,对于给定的正整数n,计算出所有划分情况。
下面的代码实现了这个功能。仔细分析,填写划线部分缺失的代码。

/**
 * 数字拆分
 * @description
 * @author zhangbiao
 * @time 2018-5-16 下午4:18:05
 */
public class Main07 {
    public static List fen(int n, int limit)
    {
        Vector v = new Vector();
        if(n<=limit) v.add(n);

        for(int i=1; i<n; i++)
        {
            if(n-i > limit) continue;

            List t = fen(i,n-i);
            for(int k=0; k<t.size(); k++)
                v.add(n-i+"+"+t.get(k));  //填空位置
        }

        return v;
    }

    public static void main(String[] args)
    {       
        List v = fen(6,6);      
        for(int i=0; i<v.size(); i++)
            System.out.println(v.get(i));
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值