1.三角形面积
如图1所示。图中的所有小方格面积都是1。
那么,图中的三角形面积应该是多少呢?
请填写三角形的面积。不要填写任何多余内容或说明性文字
答案为:28
思路:看成一个正方形减去3个三角形即可,64-8-12-16=28
2.立方变自身
观察下面的现象,某个数字的立方,按位累加仍然等于自身。
1^3 = 1
8^3 = 512 5+1+2=8
17^3 = 4913 4+9+1+3=17
请你计算包括1,8,17在内,符合这个性质的正整数一共有多少个?
答案为:6
public class Main {
public static void main(String[] args) {
int count=0;
for(int i=1;i<10000;i++) {
int rs = i*i*i;
int temp =rs;
int num=0;
while(true) {
if(temp==0) {
break;
}
num = num+temp%10;
temp = temp/10;
}
if(num==i) {
System.out.println("i="+i+" 按位累加="+num+" 立方="+rs);
count++;
}
}
System.out.println(count);
}
}
3.三羊献瑞
观察下面的加法算式:
祥 瑞 生 辉
+ 三 羊 献 瑞
----------------------------
三 羊 生 瑞 气
其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。
请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。
答案为:1085
public class Main {
public static void main(String[] args) {
//祥 瑞 生 辉
//三 羊 献 瑞
//三 羊 生 瑞 气
// a b c d
// e f g b
// e f c b h
for(int a=0;a<10;a++) {
for(int b=0;b<10;b++) {
if(b!=a)
for(int c=0;c<10;c++) {
if(c!=a&&c!=b)
for(int d=0;d<10;d++) {
if(d!=a&&d!=b&&d!=c)
for(int e=0;e<10;e++) {
if(e!=a&&e!=b&&e!=c&&e!=d)
for(int f=0;f<10;f++) {
if(f!=a&&f!=b&&f!=c&&f!=d&&f!=e)
for(int g=0;g<10;g++) {
if(g!=a&&g!=b&&g!=c&&g!=d&&g!=e&&g!=f) {
for(int h=0;h<10;h++) {
if(h!=a&&h!=b&&h!=c&&h!=d&&h!=e&&h!=f&&h!=g) {
int m = a*1000+b*100+c*10+d;
int n = e*1000+f*100+g*10+b;
int rs = e*10000+f*1000+c*100+b*10+h;
if(m+n==rs) {
if(e!=0)
System.out.println(""+e+f+g+b);
}
}
}
}
}
}
}
}
}
}
}
}
4.循环节长度
两个整数做除法,有时会产生循环小数,其循环部分称为:循环节。
比如,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) _________________________________ ; //填空
}
}
补充后为
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(); //填空
}
}
5.九数组分数
1,2,3...9 这九个数字组成一个分数,其值恰好为1/3,如何组法?
下面的程序实现了该功能,请填写划线部分缺失的代码。
public class Main
{
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);
}
}
补充完整为:
public class Main
{
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);
{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};
f(x,0);
}
}
6.加法变乘法
我们都知道:1+2+3+ ... + 49 = 1225
现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015
比如:
1+2+3+...+10*11+12+...+27*28+29+...+49 = 2015
就是符合要求的答案。
请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交10)
注意:需要你提交的是一个整数,不要填写任何多余的内容。
答案是:16,运行下列代码即可得出结果
public class Main{
public static void main(String[] args)
{
int[] num = new int[49];
for(int i=0;i<49;i++) {
num[i] =i+1;
}
for(int i=1;i<49;i++) {
int left_1 = num[i-1];
int right_1 = num[i];
for(int j=1;j<49;j++) {
int sum=0;
if(j==i-1||j==i||j==i+1) {
continue;
}
int left_2 = num[j-1];
int right_2 = num[j];
for(int k=0;k<num.length;k++) {
if(k!=i && k!=i-1&&k!=j && k!=j-1) {
sum = sum +num[k];
}
}
if(sum+left_1*right_1+left_2*right_2==2015) {
if(left_1<=left_2) {
System.out.println(left_1);
}else {
System.out.println(left_2);
}
}
}
}
}
}