1. 考察团组成
某饭店招待国外考察团。按照标准,对领导是400元/人,随团职员200元/人,对司机50元/人。
考察团共36人,招待费结算为3600元,请问领导、职员、司机各几人。
答案是三个整数,用逗号分隔。
/*
* 考察团组成
*/
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner in=new Scanner(System.in);
int i,j,k,sum,max=0,a=0,b=0;
for(i=1;i<36;i++)
{
for(j=1;j<36;j++)
{
for(k=1;k<36;k++)
{
if((i+j+k==36)&&(400*i+200*j+50*k==3600))
{
System.out.println(i+","+j+","+k);
}
}
}
}
}
}
答案:
3,5,28
2. 微生物增殖
假设有两种微生物 X 和 Y
X出生后每隔3分钟分裂一次(数目加倍),Y出生后每隔2分钟分裂一次(数目加倍)。
一个新出生的X,半分钟之后吃掉1个Y,并且,从此开始,每隔1分钟吃1个Y。
现在已知有新出生的 X=10, Y=89,求60分钟后Y的数目。
如果X=10,Y=90 呢?
本题的要求就是写出这两种初始条件下,60分钟后Y的数目。
题目的结果令你震惊吗?这不是简单的数字游戏!真实的生物圈有着同样脆弱的性质!也许因为你消灭的那只 Y 就是最终导致 Y 种群灭绝的最后一根稻草!
请忍住悲伤,把答案写在“解答.txt”中,不要写在这里!
两个整数,每个1行。
/*
* 微生物增值
*/
public class Main
{
public static void main(String[] args)
{
int new_x=1,old_x=0,y=90;
for(int time=1;time<=60;time++)
{
if(time%6==0)
{
new_x=old_x;
}
else if(time%6==1)
{
y-=new_x;
y-=old_x;
old_x+=new_x;
new_x=0;
}
else if(time%6==3)
{
y-=old_x;
}
else if(time%6==5)
{
y-=old_x;
}
if(time%4==0)
{
y*=2;
}
if(y<=0)
{
break;
}
}
System.out.println(y);
}
}
答案:
0
94371840
3. 除去次方数
自然数的平方数是:1 4 9 16 25 …
自然数的立方数是:1 8 27 64 125 …
自然数的4次方数是:1 16 81 256 …
…
这些数字都可以称为次方数。
1~10000中,去掉所有的次方数,还剩下多少个数字?
/*
* 除去次方数
*/
import java.util.HashSet;
import java.util.Set;
public class Main
{
public static void main(String[] args)
{
Set<Double> sets=new HashSet<Double>();
sets.add(1.0);//添加第一个元素1
int i,j=2;
for(i=2;Math.pow(i, j)<=10000;i++)
{
for(j=2;Math.pow(i, j)<=10000;j++)
{
sets.add(Math.pow(i, j));
}
j=2;
}
System.out.println(10000-sets.size());
}
}
答案:
9875
4. 古堡算式
福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式:
ABCDE * ? = EDCBA
他对华生说:“ABCDE应该代表不同的数字,问号也代表某个数字!”
华生:“我猜也是!”
于是,两人沉默了好久,还是没有算出合适的结果来。
请你利用计算机的优势,找到破解的答案。
把 ABCDE 所代表的数字写出来。
答案写在“解答.txt”中,不要写在这里!
/*
* 古堡算式
*/
public class Main
{
public static void main(String[] args)
{
int a,b,c,d,e;
int a1,b1,c1,d1,e1;
for(int i=1234;i<=98765;i++)
{
a=i/10000;
b=i/1000-a*10;
c=i/100-a*100-b*10;
d=i/10-a*1000-b*100-c*10;
e=i%10;
if(a!=b&&a!=c&&a!=d&&a!=e&&b!=c&&b!=d&&b!=e&&c!=d&&c!=e&&d!=e)//符合这5个数互不相等的条件
{
int t;
for(int j=0;j<10;j++)
{
t=i*j;
e1=t/10000;
d1=t/1000-e*10;
c1=t/100-e*100-d*10;
b1=t/10-e*1000-d*100-c*10;
a1=t%10;
if(a==a1&&b==b1&&c==c1&&d==d1&&e==e1)
{
System.out.println(a+" "+b+" "+c+" "+d+" "+e);
}
}
}
}
}
}
答案:
21978
5. 海盗比酒量
有一群海盗(不多于20人),在船上比拼酒量。过程如下:打开一瓶酒,所有在场的人平分喝下,有几个人倒下了。再打开一瓶酒平分,又有倒下的,再次重复...... 直到开了第4瓶酒,坐着的已经所剩无几,海盗船长也在其中。当第4瓶酒平分喝下后,大家都倒下了。
等船长醒来,发现海盗船搁浅了。他在航海日志中写到:“......昨天,我正好喝了一瓶.......奉劝大家,开船不喝酒,喝酒别开船......”
请你根据这些信息,推断开始有多少人,每一轮喝下来还剩多少人没倒下。
如果有多个可能的答案,请列出所有答案,每个答案占一行。
格式是:人数,人数,...
例如,有一种可能是:20,5,4,2,0
多个答案排列顺序不重要。
答案写在“解答.txt”中,不要写在这里!
/*
* 海盗比酒量
*/
public class Main
{
public static void main(String[] args)
{
int i,j,k,m;
double sum;
for(i=1;i<=20;i++)
{
for(j=1;j<=20;j++)
{
if(j<i)
for(k=1;k<=20;k++)
{
if(k<j)
for(m=1;m<=20;m++)
{
if(m<k)
{
sum=1.0/i+1.0/j+1.0/k+1.0/m;
if(Math.abs(sum-1.0)<0.0000001)
{
System.out.println(i+" "+j+" "+k+" "+m);
}
}
}
}
}
}
}
}
答案:
18,9,3,2
15,10,3,2
20,5,4,2
12,6,4,2
6. 欧拉与鸡蛋
大数学家欧拉在集市上遇到了本村的两个农妇,每人跨着个空篮子。她们和欧拉打招呼说两人刚刚卖完了所有的鸡蛋。
欧拉随便问:“卖了多少鸡蛋呢?”
不料一个说:“我们两人自己卖自己的,一共卖了150个鸡蛋,虽然我们卖的鸡蛋有多有少,但刚好得了同样的钱数。你猜猜看!”
欧拉猜不出。
另一个补充道:“如果我按她那样的价格卖,可以得到32元;如果她按我的价格卖,可以得到24.5元”。
欧拉想了想,说出了正确答案。
我们不是数学家,懒得列出公式来分析。但计算机可以“暴力破解”,就是把所有可能情况都试验一遍,撞上为止!
请写出每人鸡蛋的数目(顺序不限),用逗号隔开。
答案写在“解答.txt”中,不要写在这里!
/*
* 欧拉与鸡蛋
*/
public class Main
{
public static void main(String[] args)
{
int anum,bnum;
double aprice,bprice;
for(anum=1;anum<150;anum++)
{
bnum=150-anum;
aprice=32.0/bnum;
bprice=24.5/anum;
if(anum*aprice==bnum*bprice)
{
System.out.println(anum+" "+bnum);
}
}
}
}
答案:
70,80 或 80,70
7. 黄金队列
黄金分割数0.618与美学有重要的关系。舞台上报幕员所站的位置大约就是舞台宽度的0.618处,墙上的画像一般也挂在房间高度的0.618处,甚至股票的波动据说也能找到0.618的影子....
黄金分割数是个无理数,也就是无法表示为两个整数的比值。0.618只是它的近似值,其真值可以通过对5开方减去1再除以2来获得,我们取它的一个较精确的近似值:0.618034
有趣的是,一些简单的数列中也会包含这个无理数,这很令数学家震惊!
1 3 4 7 11 18 29 47 .... 称为“鲁卡斯队列”。它后面的每一个项都是前边两项的和。
如果观察前后两项的比值,即:1/3,3/4,4/7,7/11,11/18 ... 会发现它越来越接近于黄金分割数!
你的任务就是计算出从哪一项开始,这个比值四舍五入后已经达到了与0.618034一致的精度。
请写出该比值。格式是:分子/分母。比如:29/47
答案写在“解答.txt”中,不要写在这里!
/*
* 黄金队列
*/
import java.text.DecimalFormat;
public class Main
{
public static void main(String[] args)
{
DecimalFormat df=new DecimalFormat("0.000000");
int []num=new int [10000];
int i=1;
while(i<10000)
{
double a=lucas(num,i);
double b=lucas(num,i+1);
double r=a/b;
if(df.format(r).equals("0.618034"))//拿r与0.618034比较,最相似时输出
{
System.out.println(a+"/"+b);
return ;
}
i++;
}
}
public static int lucas(int []num,int n)
{
if(n==1)
{
return 1;
}
if(n==2)
{
return 3;
}
if(num[n-1]>0)
{
return num[n-1];
}
return (num[n-2]=lucas(num,n-1))+(num[n-3]=lucas(num,n-2));
}
}
答案:
1364/2207
8. 猜生日
今年的植树节(2012年3月12日),小明和他的叔叔还有小伙伴们一起去植树。休息的时候,小明的同学问他叔叔多大年纪,他叔叔说:“我说个题目,看你们谁先猜出来!”
“把我出生的年月日连起来拼成一个8位数(月、日不足两位前补0)正好可以被今天的年、月、日整除!”
他想了想,又补充到:“再给个提示,我是6月出生的。”
根据这些信息,请你帮小明算一下,他叔叔的出生年月日。
答案写在“解答.txt”中,不要写在这里!
格式是年月日连成的8位数。
例如,如果是1948年6月12日,就写:19480612
/*
* 猜生日(该题的输出问题,连续输出尚未解决)
*/
public class Main
{
public static void main(String[] args)
{
int year,day;
for(int a=1;a<=2;a++)
{
for(int b=0;b<=9;b++)
{
for(int c=0;c<=9;c++)
{
for(int d=0;d<=9;d++)
{
for(int e=0;e<=9;e++)
{
for(int f=6;f<=6;f++)
{
for(int g=0;g<=9;g++)
{
for(int h=0;h<=9;h++)
{
if((e*10+f)<=12&&(g*10+h)<=31&&(a*1000+b*100+c*10+d)<2012&&(a*1000+b*100+c*10+d)>1900)
{
long sum;
sum=a*10000000+b*1000000+c*100000+d*10000+e*1000+f*100+g*10+h;
if(sum%2012==0&&sum%3==0&&sum%12==0)
{
System.out.print(a+" "+b+" "+c+" "+d+" "+e+" "+f+" "+g+" "+h);
}
}
}
}
}
}
}
}
}
}
}
}
答案:
19550604
9. 棋盘上的麦子
你一定听说过这个故事。国王对发明国际象棋的大臣很佩服,问他要什么报酬,大臣说:请在第1个棋盘格放1粒麦子,在第2个棋盘格放2粒麦子,在第3个棋盘格放4粒麦子,在第4个棋盘格放8粒麦子,......后一格的数字是前一格的两倍,直到放完所有棋盘格(国际象棋共有64格)。
国王以为他只是想要一袋麦子而已,哈哈大笑。
当时的条件下无法准确计算,但估算结果令人吃惊:即使全世界都铺满麦子也不够用!
请你借助计算机准确地计算,到底需要多少粒麦子。
答案写在“解答.txt”中,不要写在这里!
/*
* 棋盘上的麦子(数据溢出)
* 该题未解决超长整形的定义问题
*/
public class Main
{
public static void main(String[] args)
{
long sum=0;
int i,j;
for(i=0;i<64;i++)
{
sum+=Math.pow(2, i);
}
System.out.println(sum);
}
}
答案:
18446744073709551615
10. 国庆星期日
1949年的国庆节(10月1日)是星期六。
今年(2012)的国庆节是星期一。
那么,从建国到现在,有几次国庆节正好是星期日呢?
只要答案,不限手段!
可以用windows日历,windows计算器,Excel公式,。。。。。
当然,也可以编程!
不要求写出具体是哪些年,只要一个数目!
千万不要提交源代码!
答案不要写在这里,写在“解答.txt”中
/*
* 国庆星期日
*/
public class Main
{
public static void main(String[] args)
{
int week=6,count=0;
int run=366%7;
int ping=365%7;
int year;
for(year=1950;year<2012;year++)
{
if((year%100!=0)&&(year%4==0))
{
week+=run;
week%=7;
if(week==0)
{
count++;
}
}
else
{
week+=ping;
week%=7;
if(week==0)
{
count++;
}
}
}
System.out.println(count);
}
}
答案:
9
11. 找素数
素数就是不能再进行等分的整数。比如:7,11。而9不是素数,因为它可以平分为3等份。一般认为最小的素数是2,接着是3,5,...
请问,第100002(十万零二)个素数是多少?
请注意:“2” 是第一素数,“3” 是第二个素数,依此类推。
不需要提交源代码,只要写出准确的结果即可!
答案写在:“解答.txt”中,不要写在这里。
/*
* 找素数
*/
public class Main
{
public static void main(String[] args)
{
int n=1;
int i=3;
while(n<100002)
{
if(check(i))
{
n++;
System.out.println(n+" "+i);
i++;
}
else
{
i++;
}
}
}
public static boolean check(int n)
{
int k= (int) Math.sqrt(n);
for(int i=2;i<=k;i++)
{
if(n%i==0)
{
return false;
}
}
return true;
}
}
答案:
1299743
12. 填写算式
看这个算式:
☆☆☆ + ☆☆☆ = ☆☆☆
如果每个五角星代表 1 ~ 9 的不同的数字。
这个算式有多少种可能的正确填写方法?
173 + 286 = 459
295 + 173 = 468
173 + 295 = 468
183 + 492 = 675
以上都是正确的填写法!
注意:
111 + 222 = 333 是错误的填写法!
因为每个数字必须是不同的!
也就是说:1~9中的所有数字,每个必须出现且仅出现一次!
注意:
不包括数字“0”!
注意:
满足加法交换率的式子算两种不同的答案。
所以答案肯定是个偶数!
注意:
只要求计算不同的填法的数目
不要求列出所有填写法
更不要求填写源代码!
答案不要写在这里,请写在“解答.txt”中!
/*
* 填写算式
*/
public class Main
{
public static void main(String[] args)
{
int a,b,c,d,e,f,g,h,j;
int i;
int count=0;
for(a=1;a<=9;a++)
{
for(b=1;b<=9;b++)
{
for(c=1;c<=9;c++)
{
for(d=1;d<=9;d++)
{
for(e=1;e<=9;e++)
{
for(f=1;f<=9;f++)
{
for(g=1;g<=9;g++)
{
for(h=1;h<=9;h++)
{
for(i=1;i<=9;i++)
{
if(a!=b&&a!=c&&a!=d&&a!=e&&a!=f&&a!=g&&a!=h&&a!=i&&b!=c&&b!=d&&b!=e&&b!=f&&b!=g&&b!=h&&b!=i&&c!=d&&c!=e&&c!=f&&c!=g&&c!=h&&c!=i&&d!=e&&d!=f&&d!=g&&d!=h&&d!=i&&e!=f&&e!=g&&e!=h&&e!=i&&f!=g&&f!=h&&f!=i&&g!=h&&g!=i&&h!=i)
{
if((a*100+b*10+c)+(d*100+e*10+f)==(g*100+h*10+i))
{
//System.out.println(a+" "+b+" "+c+"+"+d+" "+e+" "+f+"="+g+" "+h+" "+i);
count++;
}
}
}
}
}
}
}
}
}
}
}
System.out.println(count);
}
}
答案:
336
总结:
结果填空题都是一些简单的暴破或用计算器可以算出的小题,但有几道还是有些难度的。