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));
}
}