今天参加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;剩下的几个题目比较常见就不例举了,有兴趣的话可以做做,参加过类似比赛或喜欢算法的朋友可以留言,以便今后交流!!
第二天,海盗船长醒来,发现船搁浅了,说喝酒不开船,开船不喝酒,并说自己昨天和了一瓶酒,问海盗有多少个,每次倒下几个,举出所有可能性:
假实例: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/a+1/b+1/c/1/d=1
同时乘以abcd
范围 20->1第二个 很蛋疼 暴力吧
8层for 有三种状态 - + 无 之后拼字符串 再弄个解析的 还有一个是1-9 通过 + - 找出能组成10的倍数的几个数 之后把剩余的在这样弄
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 + "?"); }}
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