题目及解析如下:
题目大致介绍:
第一题到第三题以及第六题、第七题是结果填空,方法不限只要得到最后结果就行
第四题和第五题是代码填空题,主要考察算法基本功和编程基本功
第八题到第十题是编程题,要求编程解决问题
第一题 三角形面积
送分题,每个人都应该会的
// 三角形面积
// answer: 28 public class t1 { public static void main(String[] args) {
System.out.println(64 - 8 - 3 * 4 - 4 * 4);
} }
第二题 立方变自身
// 立方变自身
// 观察下面的现象,某个数字的立方,按位累加仍然等于自身。
// 1^3 = 1
// 8^3 = 512 5+1+2=8
// 17^3 = 4913 4+9+1+3=17
// ...
// 请你计算包括1,8,17在内,符合这个性质的正整数一共有多少个? // answer: 6 public class t2 { public static void main(String[] args) {
int res = 0;
for(int i = 1; i<99; i++) {
int s = i * i * i;
int sum = calSum(s);
if(sum == i) {
res++;
System.out.println(res + " " + i);
}
} System.out.println(res);
} private static int calSum(int s) {
String str = String.valueOf(s);
int sum = 0;
for(int i = 0; i<str.length(); i++) {
sum += str.charAt(i) - '0';
} return sum;
} }
这个题也算是送分题
第三题 三羊献瑞
暴力求解,注意看清楚,别看错了!然后可以推导出某些位置的数,比如下面的三就是1,祥就是9,羊就是0
// 三羊献瑞 // 观察下面的加法算式:
//
//
// 祥 瑞 生 辉
// + 三 羊 献 瑞
//-------------------
// 三 羊 生 瑞 气
//
//
// 其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。
//
// 请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容 // answer: 1085 public class t3 { public static void main(String[] args) { for (int a = 1; a <= 9; a++) {
for (int b = 0; b <= 9; b++) {
if(b!=a)
for (int c = 0; c <= 9; c++) {
if(c!=a&&c!=b)
for (int d = 0; d <= 9; d++) {
if(d!=c&&d!=b&&d!=a)
for (int i = 1; i <= 9; i++) {
if(i!=d&&i!=c&&i!=b&&i!=a)
for (int j = 0; j <= 9; j++) {
if(j!=i&&j!=d&&j!=c&&j!=b&&j!=a)
for (int k = 0; k <= 9; k++) {
int num1 = a * 1000 + b * 100 + c * 10 + d;
int num2 = i * 1000 + j * 100 + k * 10 + b;
int res = num1 + num2;
if(k!=j&&k!=i&&k!=d&&k!=c&&k!=b&&k!=a)
for(int q=0; q<=9; q++) {
int aim = i * 10000 + j * 1000 + c * 100 + b * 10 + q;
if(q!=k&&q!=j&&q!=i&&q!=d&&q!=c&&q!=b&&q!=a)
if(res == aim) {
System.out.println(num1 + " + " + num2 + " = " + res + " aim: " + aim);
}
}
}
}
}
}
}
}
} } }
第四题 循环节长度
// 循环节长度 // 两个整数做除法,有时会产生循环小数,其循环部分称为:循环节。
// 比如,11/13=6=>0.846153846153..... 其循环节为[846153] 共有6位。
// 下面的方法,可以求出循环节的长度。
//
//
// 请仔细阅读代码,并填写划线部分缺少的代码。 public class t4 { public static int f(int n, int m) {
n = n % m;
Vector v = new Vector(); for (;;) {
v.add(n);
n *= 10;
n = n % m;
if (n == 0)
return 0;
if (v.indexOf(n) >= 0) {
return v.size() - v.indexOf(n); // 填空
}
}
} public static void main(String[] args) { for (int i = 1; i <= 17; i++) {
for (int j = 1; j <= 17; j++) {
if (i % j != 0) {
System.out.println(i + " " + j + " " + (double)i/j + " " + f(i, j));
}
}
} } }
第五题 九数组分数
很简单的暴力法,注意使用全排列套路:
// 九数组分数 // 1,2,3...9 这九个数字组成一个分数,其值恰好为1/3,如何组法?
// 下面的程序实现了该功能,请填写划线部分缺失的代码。 // 答案如下:
// 5832 17496
// 5823 17469 public class t5 {
public static void test(int[] x) {
// 测试函数 检测是否符合条件
int a = x[0] * 1000 + x[1] * 100 + x[2] * 10 + x[3];
int b = x[4] * 10000 + x[5] * 1000 + x[6] * 100 + x[7] * 10 + x[8];
if (a * 3 == b)
System.out.println(a + " " + b);
} public static void f(int[] x, int k) {
if (k >= x.length) {
test(x);
return;
} // 1, 2, 3, 4, 5, 6, 7, 8, 9 for (int i = k; i < x.length; i++) {
// 下面是全排列的套路代码 你应该背下来
{
int t = x[k];
x[k] = x[i];
x[i] = t;
}
f(x, k + 1);
{
int t = x[k];
x[k] = x[i];
x[i] = t;
}
}
} public static void main(String[] args) {
int[] x = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
// 用数组x来保存这个分数
// 前四个是分子 后六个是分母
f(x, 0);
}
}
第六题 加法变乘法
// 我们都知道:1+2+3+ ... + 49 = 1225
//
// 现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015
//
// 比如:
// 1+2+3+...+10*11+12+...+27*28+29+...+49= 2015
// 就是符合要求的答案。
//
//
// 请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交10)。
//
// 注意:需要你提交的是一个整数,不要填写任何多余的内容 // answer:
// 16 // i j m n
// i*j + m*n - (i + j + m + n) == 2015 - 1225 public class t6 {
public static void main(String[] args) { for(int i=10; i<=50; i++) {
int j = i+1;
for(int m=j+2; m<=50; m++) {
int n = m + 1;
if(i*j + m*n - (i + j + m + n) == 2015 - 1225) {
System.out.println(i + " " + j);
}
} } }
}
第七题 牌型种数
// 牌型种数
// 小明被劫持到X赌城,被迫与其他3人玩牌。
//
// 一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。
//
// 这时,小明脑子里突然冒出一个问题:
//
// 如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序,自己手里能拿到的初始牌型组合一共有多少种呢? // 思路: 13 堆牌,每堆 4 个,每堆可选 0 到 4 个,只要总数为 13 即可
// 答案: 3598180 public class t7 { public static int res;
public static void dfs(int type, int sum) {
if(sum > 13 || type > 13) {
res += 0;
return;
}
if(type == 13 && sum==13) {
res += 1;
return;
}
for(int i=0; i<=4; i++){
dfs(type+1, sum+i);
}
} public static void main(String[] args) {
dfs(0, 0);
System.out.println(res);
} }
第八题 饮料换购
第一道编程题,很简单:
import java.util.Scanner; // 饮料换购
// 乐羊羊饮料厂正在举办一次促销优惠活动。乐羊羊C型饮料,凭3个瓶盖可以再换一瓶C型饮料,并且可以一直循环下去,但不允许赊账。
//
// 请你计算一下,如果小明不浪费瓶盖,尽量地参加活动,那么,对于他初始买入的n瓶饮料,最后他一共能得到多少瓶饮料。
//
// 输入:一个整数n,表示开始购买的饮料数量(0<n<10000)
// 输出:一个整数,表示实际喝完的饮料数
//
// 例如:
// 用户输入:
// 100
// 程序应该输出:
// 149
//
// 用户输入:
// 101
// 程序应该输出:
// public class t8 { private static Scanner input; public static int f(int n) {
int res = n;
while (n >= 3) {
n -= 2;
res += 1;
} return res;
} public static void main(String[] args) {
input = new Scanner(System.in);
System.out.println(": ");
int n = input.nextInt();
System.out.println(f(n)); } }
第九题 垒骰子
第十题 生命之树
第九题和第十题有一定难度,不做研究了,时间没有那么多。。。。