/*大致的题目edfg+abcd=abfdh求abcd*/
public class 三羊献瑞 {
public static void show(int[] a)
{
System.out.print("三羊献瑞为:");
for(int i=0;i<4;i++) {
System.out.print(a[i]);
}
}
public static void test(int[] a)
{ if(a[0]==0) return;
if(a[4]*1000+a[3]*100+a[5]*10+a[6]+a[0]*1000+a[1]*100+a[2]*10+a[3]!=a[0]*10000+a[1]*1000+a[5]*100+a[3]*10+a[7])
return;
show(a);
}
public static void f(int[] a,int k)
{
//递归到底层(总共n个数,从0开始为第一层,到第n-1层结束)
if(k==a.length-1) {
test(a);
return;
}
for(int i=k;i<a.length;i++)
{
//第k个数分别和他自身,他后面的所有数,进行交换
{int t=a[i];a[i]=a[k];a[k]=t;}
//交换后递归下一层
f(a,k+1);
//保证每一层递归后保持上一层的顺序
{int t=a[i];a[i]=a[k];a[k]=t;}
}
}
public static void main(String[] args)
{
int[] a= {0,1,2,3,4,5,6,7,8,9};
f(a,0);
System.out.println();
}
}
/*1. 搭积木
【问题描述】
小明最近喜欢搭数字积木。一共有10块积木,每个积木上有一个数字,0~9。
搭积木规则:
每个积木放到其它两个积木的上面,并且一定比下面的两个积木数字小。
最后搭成4层的金字塔形,必须用完所有的积木。
下面是两种合格的搭法:
0
1 2
3 4 5
6 7 8 9
0
3 1
7 5 2
9 8 6 4
请你计算这样的搭法一共有多少种?*/
public class 搭积木 {
static int N;
static void show(int[] a)
{
System.out.println(" " + a[0]);
System.out.println(" " + a[1] + " " + a[2]);
System.out.println(" " + a[3] + " " + a[4] + " " + a[5]);
System.out.println("" + a[6] + " " + a[7] + " " + a[8] + " " + a[9]);
System.out.println();
}
static boolean near(int a, int b)
{
if(a+1==b || a==b+1) return true;
return false;
}
static void test(int[] a)
{
if(a[1]<a[0]) return;
if(a[2]<a[0]) return;
if(a[3]<a[1]) return;
if(a[4]<a[1]) return;
if(a[4]<a[2]) return;
if(a[5]<a[2]) return;
if(a[6]<a[3]) return;
if(a[7]<a[3]) return;
if(a[7]<a[4]) return;
if(a[8]<a[4]) return;
if(a[8]<a[5]) return;
if(a[9]<a[5]) return;
show(a);
N++;
}
// a: 待排元素
// k: 当前考虑的位置
static void f(int[] a, int k)
{
if(k==a.length-1){
test(a);
return;
}
for(int i=k; i<a.length; i++){
{int t=a[i]; a[i]=a[k]; a[k]=t;}
f(a,k+1);
{int t=a[i]; a[i]=a[k]; a[k]=t;}
}
}
public static void main(String[] args)
{
int[] a = {0,1,2,3,4,5,6,7,8,9};
f(a,0);
System.out.println("N= " + N);
}
}
/*☆☆☆+☆☆☆=☆☆☆1到9个数,不重复,有多少种解法*/
public class 凑星星 {
static int N=0;
public static void main(String[] args)
{
int[] a= {1,2,3,4,5,6,7,8,9};
f(a,0);
System.out.println("一共有"+N+"种可能");
}
public static void test(int[] a)
{
if(a[0]*100+a[1]*10+a[2]+a[3]*100+a[4]*10+a[5]!=a[6]*100+a[7]*10+a[8]) return;
N++;
}
public static void f(int[] a,int k)
{
if(k==a.length-1) {
test(a);
return;
}
for(int i=k;i<a.length;i++)
{
{int t=a[i];a[i]=a[k];a[k]=t;}
f(a,k+1);
{int t=a[i];a[i]=a[k];a[k]=t;}
}
}
}
/* B DEF
A + --- + ------- = 10
C GHI
字母代表1到9个数字,问一共有多少种可能*/
public class 凑算式 {
static int N=0;
public static void test(double[] a)
{
double sum=a[0]+(double)(a[1]/a[2])+(double)((a[3]*100+a[4]*10+a[5])/(a[6]*100+a[7]*10+a[8]));
if(sum!=10) return;
N++;
}
public static void f(double[] a,int k) {
if(k==a.length-1) {
test(a);
return;
}
for(int i=k;i<a.length;i++) {
{double t=a[i];a[i]=a[k];a[k]=t;}
f(a,k+1);
{double t=a[i];a[i]=a[k];a[k]=t;}
}
}
public static void main(String[] args)
{
double[] a= {1,2,3,4,5,6,7,8,9};
f(a,0);
System.out.println("总共有"+N+"种可能");
}
}
/*美国数学家维纳(N.Wiener)智力早熟,11 岁就上了大学。他曾在 1935~1936 年应邀来中国清华大学讲学。
* 有人询问他的年龄,他回答说:“我年龄的立方是个 4 位数。我年龄的 4 次方是个 6 位数。
* 这 10 个数字正好包含了从 0 到 9 这 10 个数字,每个都恰好出现 1 次。”
* 请你推算一下,他当时到底有多年轻。
* a[0]*a[0]*a[0]=a[1]*1000+a[2]*100+a[3]*10+a[4] ;a[0]*a[0]*a[0]*a[0]=...*/
public class 猜年龄 {
public static void main(String[] args)
{
int[] a= {0,1,2,3,4,5,6,7,8,9};
f(a,0);
}
public static void f(int[] a,int k) {
if(k==a.length-1) {
test(a);
return;
}
for(int i=k;i<a.length;i++) {
{int t=a[i];a[i]=a[k];a[k]=t;}
f(a,k+1);
{int t=a[i];a[i]=a[k];a[k]=t;}
}
}
public static void test(int[] a) {
for(int i=12;i<100;i++) {
if(i*i*i==a[1]*1000+a[2]*100+a[3]*10+a[4]&&i*i*i*i==a[0]*100000+a[5]*10000+a[6]*1000+a[7]*100+a[8]*10+a[9])
System.out.println(i);}
}
}