前言
简单题要做的又快又好又对!!
棋盘放麦子
题目描述
你一定听说过这个故事。国王对发明国际象棋的大臣很佩服,问他要什么报酬,大臣说:请在第 1 个棋盘格放 1 粒麦子,在第 2 个棋盘格放 2 粒麦子,在第 3 个棋盘格放 4 粒麦子,在第 4 个棋盘格放 8 粒麦子,…后一格的数字是前一格的两倍,直到放完所有棋盘格(国际象棋共有 64 格)。
国王以为他只是想要一袋麦子而已,哈哈大笑。
当时的条件下无法准确计算,但估算结果令人吃惊:即使全世界都铺满麦子也不够用!
请你借助计算机准确地计算,到底需要多少粒麦子。
参考代码
import java.math.BigInteger;
public class Main {
public static void main (String[] arge) {
BigInteger a =new BigInteger("0");
BigInteger b = new BigInteger("2");
for (int i = 0; i < 64; i++) {
a = a.add(b.pow(i));
}
System.out.println(a);
}
}
答案:18446744073709551615
猜生日
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
今年的植树节(20122012 年 33 月 1212 日),小明和他的叔叔还有小伙伴们一起去植树。休息的时候,小明的同学问他叔叔多大年纪,他叔叔说:“我说个题目,看你们谁先猜出来!”
“把我出生的年月日连起来拼成一个 88 位数(月、日不足两位前补 00)正好可以被今天的年、月、日整除!”
他想了想,又补充到:“再给个提示,我是 66 月出生的。”
根据这些信息,请你帮小明算一下,他叔叔的出生年月日。
格式是年月日连成的 88 位数。例如,如果是 19481948 年 66 月 1212 日,就写:1948061219480612。
参考代码
public class Main {
public static void main(String[] args) {
int i,j,sum;
for(i=1900;i<2020;i++){
for(j=1;j<=30;j++){
sum=i*10000+600+j;
if(sum%2012==0 && sum%3==0 && sum%12==0){
System.out.println(sum);
}
}
}
}
}
答案:19550604
汉诺塔
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。
大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着 64 片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上(可以借助第三根柱子做缓冲)。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
如下图所示是现代“山寨”版的该玩具。64 个圆盘太多了,所以减为 7 个,金刚石和黄金都以木头代替了…但道理是相同的。
据说完成大梵天的命令需要太多的移动次数,以至被认为完成之时就是世界末日!
你的任务是精确计算出到底需要移动多少次。
很明显,如果只有 2 个圆盘,需要移动 3 次。
圆盘数为 3,则需要移动 7 次。
那么 64 个呢?
解题思路
import java.math.BigInteger;
public class Main {
public static void main(String[] args) {
BigInteger bigInteger = new BigInteger(2+"");
System.out.println(bigInteger.pow(64).subtract(new BigInteger(1+"")));
}
}
答案:18446744073709551615
李白打酒
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
话说大诗人李白,一生好饮。幸好他从不开车。
一天,他提着酒壶,从家里出来,酒壶中有酒2斗。他边走边唱:
无事街上走,提壶去打酒。 逢店加一倍,遇花喝一斗。
这一路上,他一共遇到店5次,遇到花 10次,已知最后一次遇到的是花,他正好把酒喝光了。
请你计算李白遇到店和花的次序,可以把遇店记为 a,遇花记为 b。
则:babaabbabbabbbb 就是合理的次序。像这样的答案一共有多少呢?请你计算出所有可能方案的个数(包含题目给出的)。
运行限制
最大运行时间:1s
最大运行内存: 128M
参考代码
public class Main {
static int count=0;
public static void main(String[] args) {
f(2,5,10);
System.out.println(count);
}
private static void f(int n,int a,int b) {
if(n<0||a<0||b<0) {
return;
}
if(n==1&&a==0&&b==1) {
count++;
return;
}
f(n*2, a-1, b);
f(n-1, a, b-1);
}
}
答案:14
猜年龄
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
美国数学家维纳智力早熟,11 岁就上了大学。他曾在 1935 ~ 1936 年应邀来中国清华大学讲学。
一次,他参加某个重要会议,年轻的脸孔引人注目。于是有人询问他的年龄,他回答说:
“我年龄的立方是个 4 位数。我年龄的 4 次方是个6 位数。这 10 个数字正好包含了从 0 到 9 这 10 个数字,每个都恰好出现 1次。”
请你推算一下,他当时到底有多年轻。
运行限制
最大运行时间:1s
最大运行内存: 128M
参考代码
import java.util.HashSet;
public class Main {
public static void main(String[] args) {
HashSet<Character> set = new HashSet<Character>();
for (int i = 11; i <100; i++) {
set.clear();
int t=(int) Math.pow(i, 3);
int f=(int) Math.pow(i, 4);
String string=""+t+f;
for (int j = 0; j < string.length(); j++) {
set.add(string.charAt(j));
}
if (set.size()==10) {
System.out.println(i);
break;
}
}
}
}
答案:18
组素数
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
素数就是不能再进行等分的数。比如:2 3 5 7 11 等。9=3∗3 说明它可以3等分,因而不是素数。
我们国家在 1949 年建国。如果只给你 1 9 4 9 这 4 个数字卡片,可以随意摆放它们的先后顺序(但卡片不能倒着摆放啊,我们不是在脑筋急转弯!),那么,你能组成多少个 4 位的素数呢?
比如:1949,4919 都符合要求。
请你输出能组成的 44 位素数的个数,不要罗列这些素数!!
运行限制
最大运行时间:1s
最大运行内存: 128M
参考代码
package timeProblem;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
int[] arr= {1,9,4,9};
ArrayList<Integer> as=new ArrayList<>();
int num=0;
int sum=0;
boolean b=true;
for(int i=0;i<arr.length;i++) {
for(int j=0;j<arr.length;j++) {
for(int k=0;k<arr.length;k++) {
for(int l=0;l<arr.length;l++) {
num=arr[i]*1000+arr[j]*100+arr[k]*10+arr[l];
if(i!=j && i!=k && i!=l && j!=k && j!=l && k!=l) {
for(int a=2;a<num;a++) {
if(num%a==0) {
b=false;
break;
}
}
if(b && as.indexOf(num)<0) {
as.add(num);
sum++;
}
b=true;
}
}
}
}
}
System.out.println(sum);
}
}
答案:6