一、三角形面积
如【图1】所示。图中的所有小方格面积都是1。
那么,图中的三角形面积应该是多少呢?
请填写三角形的面积。不要填写任何多余内容或说明性文字。
分析:(该正方形的面积减去其他三个三角形的面积即可)
代码如下:
package s_1;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.print(8*8-2*8/2-4*6/2-4*8/2);
}
}
二、立方变自身
立方变自身
观察下面的现象,某个数字的立方,按位累加仍然等于自身。
1^3 = 1
8^3 = 512 5+1+2=8
17^3 = 4913 4+9+1+3=17
...
请你计算包括1,8,17在内,符合这个性质的正整数一共有多少个?
请填写该数字,不要填写任何多余的内容或说明性的文字。
代码如下:
package s_2;
public class Main {
/**
* 答案:6个
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
for(int i=1;i<=100000;i++){
int s=i*i*i;
//将基本类型转换为string类型。
String a=Integer.toString(s);
int res=0;
for(int j=0;j<a.length();j++){
res+=a.charAt(j)-'0';
}
if(res==i)
System.out.println(i);
}
}
}
三、三羊献瑞(切记加法运算首位不为0)
三羊献瑞
观察下面的加法算式:
祥 瑞 生 辉
+ 三 羊 献 瑞
-------------------
三 羊 生 瑞 气
(如果有对齐问题,可以参看【图1.jpg】)
其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。
请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。
分析:
由于 "三"是数字的首位,低位的数字进位后必然为1,所以能先确定 ”三“为1。
1).直接进行删选只要每个数的首位不为0,即可。代码的方式为1)的方式。
2).更方便的是直接以e为1作为条件进行删选。
代码如下:
package s_3;
public class Main {
/*
*
*答案为 1085
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
for(int a=0;a<=9;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=0;f<=9;f++){
for(int g=0;g<=9;g++){
for(int h=0;h<=9;h++){
if(a!=b&&a!=c&&a!=d&&a!=e&&a!=f&&a!=g&&a!=h&&
b!=c&&b!=d&&b!=e&&b!=f&&b!=g&&b!=h
&&c!=d&&c!=e&&c!=f&&c!=g&&c!=h&&
d!=e&&d!=f&&d!=g&&d!=h&&
e!=f&&e!=g&&e!=h&&
f!=g&&f!=h&&
g!=h){
int m=a*1000+b*100+c*10+d;
int n=e*1000+f*100+g*10+b;
int k=e*10000+f*1000+c*100+b*10+h;
if(m+n==k){
if(e!=0&&a!=0){
System.out.print(e);
System.out.print(f);
System.out.print(g);
System.out.print(b);
System.out.println();
break;
}
}
}
}
}
}
}
}
}
}
}
}
}
四、循环节长度
两个整数做除法,有时会产生循环小数,其循环部分称为:循环节。
比如,11/13=6=>0.846153846153..... 其循环节为[846153] 共有6位。
下面的方法,可以求出循环节的长度。
请仔细阅读代码,并填写划线部分缺少的代码。
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) _________________________________ ; //填空
}
}
注意,只能填写缺少的部分,不要重复抄写已有代码。不要填写任何多余的文字。
思路:
所用到的函数:
此题目比较特殊,在vector中的第0位,为其第一次出现的位置。
但仍应该考虑全面一些,此题在数11之前还有其他的数字,所以应用当前vector的长度减去其第一次出现时的下标。
代码如下:
package s_4;
import java.util.Vector;
public class Main {
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) {
// TODO Auto-generated method stub
System.out.println(f(11,13));
System.out.println(f(1,3));
}
}
五、
九数组分数
1,2,3...9 这九个数字组成一个分数,其值恰好为1/3,如何组法?
下面的程序实现了该功能,请填写划线部分缺失的代码。
public class A
{
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;
}
for(int i=k; i<x.length; i++){
{int t=x[k]; x[k]=x[i]; x[i]=t;}
f(x,k+1);
_______________________________________ // 填空
}
}
public static void main(String[] args)
{
int[] x = {1,2,3,4,5,6,7,8,9};
f(x,0);
}
}
注意,只能填写缺少的部分,不要重复抄写已有代码。不要填写任何多余的文字。
答案为:
{int t=x[k]; x[k]=x[i]; x[i]=t;}
六、加法变乘法
我们都知道:1+2+3+ ... + 49 = 1225
现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015
比如:
1+2+3+...+10*11+12+...+27*28+29+...+49 = 2015
就是符合要求的答案。
请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交10)。
注意:需要你提交的是一个整数,不要填写任何多余的内容。
代码如下:
package s_6;
public class Main {
/**
* 答案为:16
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
由于为递增,并且不重复的状态。
for(int i=1;i<=49;i++){
for(int j=i+1;j<=49;j++){
for(int k=j+1;k<=49;k++)
for(int l=k+1;l<=49;l++){
int m=1225-i-j-k-l;
/*
* 相邻那个条件很重要
* j==i+1&&l==k+1 !!!!
*/
if(m+i*j+k*l==2015&&j==i+1&&l==k+1)
System.out.println(i);
}
}
}
}
}