第一题(文件命名T1)
一副扑克除去大王小王有52张牌,那么一副完全打乱的牌有多少种排列的可能?
456789取mod。
Ps:无视花色,♣♦♥♠四种花色算是同一种牌
package 日常练习;
import java.math.BigInteger;
public class 扑克排序 {
public static void main(String[] args) {
BigInteger mod=new BigInteger("123456789");
BigInteger a=new BigInteger("1");
BigInteger p=new BigInteger("1");
BigInteger ans=new BigInteger("1");
for(int i=2;i<52;i++)
{
p=p.add(a);
ans=ans.multiply(p);
}
BigInteger fm=new BigInteger("24");
System.out.println(ans);
System.out.println((ans.divide(fm.pow(13))).mod(mod));
}
}
第二题(文件命名T2)
使用1~9,九个数字,组成三行三列的方阵,使每行每列以及对角线的数值相等。
请输出所有组成方案。
最终结果对123Ps:全排列问题
package 日常练习;
import java.util.Arrays;
public class 九宫求值 {
public static int arr[]= {1,2,3,4,5,6,7,8,9};
public static void f(int p) {
if(p==arr.length) {
check();
}
for(int i=p;i<arr.length;i++)
{
int t=arr[i];arr[i]=arr[p];arr[p]=t;
f(p+1);
t=arr[i];arr[i]=arr[p];arr[p]=t;
}
}
public static void check() {
if(arr[0]+arr[1]+arr[2]==arr[3]+arr[4]+arr[5]
&&arr[0]+arr[1]+arr[2]==arr[6]+arr[7]+arr[8]
&&arr[0]+arr[3]+arr[6]==arr[1]+arr[4]+arr[7]
&&arr[0]+arr[3]+arr[6]==arr[2]+arr[5]+arr[8]
&&arr[0]+arr[4]+arr[8]==arr[2]+arr[4]+arr[6]) {
for(int i=0;i<arr.length;i++) {
System.out.print(arr[i]+" ");
if((i+1)%3==0)
System.out.println();
}
System.out.println("**************************");
}
}
public static void main(String[] args) {
f(0);
}
}
第三题(文件命名T3)
从数组{5,6,7,8,9,10,11,12,13,14}中选出三个数据,使其组成A,B,C(B>A>C)请问有多少种组合方式。
Ps:组合问题
package 日常练习;
public class 组合数 {
public static void main(String[] args) {
// int arr[]= {5,6,7,8,9,10,11,12,13,14};
int arr[]= {5,6,7,8};
int count=0;
for(int i=0;i<arr.length;i++)
{
for(int j=i+1;j<arr.length;j++)
{
for(int k=j+1;k<arr.length;k++)
{
count++;
}
}
}
System.out.println(count);
}
}
第四题(文件命名T4)
92
34 65
43 65 77
12 43 76 23
87 12 19 99 25
25 57 92 46 83 29
77 39 16 43 67 65 43
从上边顶点出发,选择它下面的左右节点 (每层只选一个,且后项必须为前一项的子节点),求该堆所能组成的最大值。
例如:
82
24 77
88 17 21
最大值为82+24+88
package 日常练习;
public class 堆求最大值 {
public static int ans=0;
public static int arr[][]= {
{92},
{34 , 65},
{43 , 65 ,77},
{12 , 43 , 76 , 23},
{87 , 12 , 19 , 99 , 25},
{25 , 57 , 92 , 46 , 83 , 29},
{77 , 39 , 16 , 43 , 67 ,65 , 43}
};
public static void f(int p,int q,int current) {
if(p==arr.length) {
ans=ans>current?ans:current;
}else {
f(p+1,q,current+arr[p][q]);
f(p+1,q+1,current+arr[p][q]);
}
}
public static void main(String[] args) {
//DP解法
//#############################################################################
// for(int i=arr.length-1;i>0;i--)
// {
// for(int j=0;j<=arr[i].length-2;j++)
// {
// arr[i-1][j]+=arr[i][j]>arr[i][j+1]?arr[i][j]:arr[i][j+1];
// }
// }
// System.out.println(arr[0][0]);
//DFS解法
//##################################################################################
f(0,0,0);
System.out.println(ans);
}
}