今天参加2012蓝桥比赛,记得几道有意思的题目写出来给大家分享一下,题的原文不能一一记清,把大概的题意写出来不影响题意!1、有n个海盗 n<=20进行喝酒比赛,第一瓶酒打开后那些人平分喝掉,有几个人喝醉倒下,在打开第二瓶酒,剩下的人平摊喝下,又有几个人倒下,当第四瓶酒喝完后 包括船长的海盗全部倒下,
第二天,海盗船长醒来,发现船搁浅了,说喝酒不开船,开船不喝酒,并说自己昨天和了一瓶酒,问海盗有多少个,每次倒下几个,举出所有可能性:
假实例:15(海盗总数) 5(第一次倒下5个) 4(第二次倒下3个)  0(第三次倒下0)2、1 2 3 4 5 6 7 8 9 = 110,在每个数字之间添入‘+’或 ‘-’每个数字之间可以不填 如 
假实例:1+23+4+5+6+7+8+9=110
假实例 12+3+4-56+78+9=110;剩下的几个题目比较常见就不例举了,有兴趣的话可以做做,参加过类似比赛或喜欢算法的朋友可以留言,以便今后交流!!

解决方案 »

  1.   

    哎,这次酱油了,平时不怎么研究算法,然而虽说是java,但是我喜欢称之为java版的acm啊
      

  2.   

    蓝桥杯有一定难度,不过没ACM难啊。
      

  3.   

    第一个简单
    1/a+1/b+1/c/1/d=1
    同时乘以abcd
    范围 20->1第二个  很蛋疼 暴力吧
    8层for  有三种状态 - + 无   之后拼字符串  再弄个解析的  还有一个是1-9 通过 + - 找出能组成10的倍数的几个数  之后把剩余的在这样弄
      

  4.   

    import java.util.LinkedList;
    import java.util.List;public class Test { public static void main(String[] args) {
    Test test = new Test();
    test.getList(1, "");
    } public int calValue(String s) {
    List<Integer> values = new LinkedList<Integer>();
    List<Character> characters = new LinkedList<Character>();
    int tempValue = 0;
    for (int i = 0; i < s.length(); i++) {
    if (s.charAt(i) == '+' || s.charAt(i) == '-') {
    characters.add(s.charAt(i));
    values.add(tempValue);
    tempValue = 0;
    } else {
    tempValue = tempValue * 10 + s.charAt(i) - 48;
    }
    }
    values.add(tempValue);
    tempValue = values.remove(0);
    while (characters.size() != 0) {
    if (characters.remove(0) == '+') {
    tempValue += values.remove(0);
    } else {
    tempValue -= values.remove(0);
    }
    }
    return tempValue;
    } public String getShizi(String s) {
    String numbers = "123456789";
    String shizi = "1";
    for (int i = 0; i < s.length(); i++) {
    if ('+' == s.charAt(i)) {
    shizi = shizi + "+" + numbers.charAt(i + 1);
    }
    if ('-' == s.charAt(i)) {
    shizi = shizi + "-" + numbers.charAt(i + 1);
    }
    if ('?' == s.charAt(i)) {
    shizi = shizi + numbers.charAt(i + 1);
    }
    } return shizi;
    } public void getList(int index, String s) {
    if (index > 8) {
    String shizi = getShizi(s);
    int calValue = calValue(shizi);
    if (calValue == 110) {
    System.out.println(shizi + "=" + calValue);
    }
    return;
    }
    getList(index + 1, s + "+");
    getList(index + 1, s + "-");
    getList(index + 1, s + "?"); }}
      

  5.   

    1
    a<=20
    1/a+1/b+1/c+1/d=1
    a>b>c>d>12
    1*a+2*b+3*c+4*d+5*e+6*f+7*g+8*h+9=110
    a,b,c,d,e,f,g,h=10 or 1
    a*b=10,b*c=10,c*d=10,d*e=10,e*f=10,f*g=10,g*h=10