1、标题:分机号
X老板脾气古怪,他们公司的电话分机号都是3位数,老板规定,所有号码必须是降序排列,且不能有重复的数位。比如:
751,520,321 都满足要求,而,
766,918,201 就不符合要求。
现在请你计算一下,按照这样的规定,一共有多少个可用的3位分机号码?
请直接提交该数字,不要填写任何多余的内容。
-----------------------------
package lq2015_gs; public class t1 { public static void main(String[] arg) { int ans = 0; for(int i = 0; i <= 9; i++) { for(int j = 0; j < i; j++) { for(int k = 0; k < j; k++) { ans++; System.out.println(i + "" + j + "" + k); } } } System.out.println(ans); } } /* ans = 120 */
2、标题:五星填数
如【图1.png】的五星图案节点填上数字:1~12,除去7和11。
要求每条直线上数字和相等。
如图就是恰当的填法。
请你利用计算机搜索所有可能的填法有多少种。
注意:旋转或镜像后相同的算同一种填法。
请提交表示方案数目的整数,不要填写任何其它内容。
-----------------------------------------------
思路:全排列暴力
package lq2015_gs; public class t2 { public static int[] data = {1,2,3,4,5,6,8,9,10,12}; public static int[] data2 = {1,2,3,4,5,6,8,9,10,12}; public static int[] vist = new int[10]; public static int ans = 0; public static int N = 10; public static void main(String[] args) { // TODO Auto-generated method stub dfs(0); System.out.println("ans = " + ans); System.out.println("ans/10 = " + ans / 10); } public static void dfs(int ct) { if(ct == N) { int[] a = new int[5]; a[0] = data2[0] + data2[2] + data2[5] + data2[7]; a[1] = data2[0] + data2[3] + data2[6] + data2[9]; a[2] = data2[1] + data2[2] + data2[3] + data2[4]; a[3] = data2[1] + data2[5] + data2[8] + data2[9]; a[4] = data2[4] + data2[6] + data2[8] + data2[7]; int f = 1; for(int i = 1; i < 5; i++) { if(a[i] != a[i - 1]) { f = 0; break; } } if(f == 1) { ans++; for(int i = 0; i < N; i++) { System.out.print(data2[i]); } System.out.println( "--"); } return ; } for(int i = 0; i < N; i++) { if(vist[i] == 0) { vist[i] = 1; data2[ct] = data[i]; dfs(ct + 1); vist[i] = 0; } } } } /* ans = 12; */
原文:https://www.cnblogs.com/zhumengdexiaobai/p/10897411.html