62,616
社区成员
发帖
与我相关
我的任务
分享
package jp190410;
public class MyClass
{
static int n = 4;
static int k=2;
static int gCount=0;
static int[] b=new int[100];
static int[] a=new int[100];
public static void dfs(int step)
{
//if(gCount>=500) return;
if (step>n*2)
{
for (int i = 1; i <=n; i++)
{
if(Math.abs(a[i]-a[i+n])<k) return;
}
for(int i=2;i<=n;i++) //检查数组a和b是否有序,默认是升序
{
if (a[i]<a[i-1] ) return;
if (a[i+n]<a[i+n-1]) return;
}
gCount++;
StringBuffer s1=new StringBuffer();
s1.append("答案 "+String.format("%-4d",gCount)+" 数组a:[");
for(int i=1;i<=n;i++)
s1.append(String.format("%-4d", a[i]));
s1.append("] 数组b:[");
for(int i=n+1;i<=n*2;i++)
s1.append(String.format("%-4d", a[i]));
s1.append("]");
System.out.print(s1.toString());
System.out.println();
s1.setLength(0);
return;
}
for (int i = 1; i <= n*2; i++)
{
if (b[i]==0)
{
a[step]=i;
b[i]=1;
dfs(step+1);
b[i]=0;
}
}
}
public static void main(String[] args)
{
dfs(1);
}
}
package jp190410;
public class MyClass
{
static int n = 8;
static int k=10;
static int gCount=0;
static int[] b=new int[100];
static int[] a=new int[100];
public static void dfs(int step)
{
//if(gCount>=500) return;
if (step>n)
{
int n2=n/2;
for (int i = 1; i <=n2; i++)
{
if(Math.abs(a[i]-a[i+n2])<k) return;
}
gCount++;
StringBuffer s1=new StringBuffer();
s1.append("答案 "+String.format("%-4d",gCount)+" 数组a:[");
for(int i=1;i<=n2;i++)
s1.append(String.format("%-4d", a[i]));
s1.append("] 数组b:[");
for(int i=n2+1;i<=n;i++)
s1.append(String.format("%-4d", a[i]));
s1.append("]");
System.out.print(s1.toString());
System.out.println();
s1.setLength(0);
return;
}
for (int i = 1; i <= n*2; i++)
{
if (b[i]==0)
{
a[step]=i;
if (a[step-1]>a[step]) continue;
b[i]=1;
dfs(step+1);
b[i]=0;
}
}
}
public static void main(String[] args)
{
dfs(1);
}
}
function count( i )
{
if( i > 2*n )
{
++sum;
//if( sum <= 10 ) console.log( v1, v2 );
return;
}
let t = Math.min(v1.length+1, v2.length) - 1;
if( v1.length < n && ( t >= 0 && ( v1.length < v2.length && Math.abs( i - v2[t] ) >= k || v1.length >= v2.length ) || t < 0 ) )
{
v1.push( i );
count( i + 1 );
v1.pop();
}
t = Math.min(v1.length, v2.length+1) - 1;
if( v2.length < n && t >= 0 && ( v2.length < v1.length && Math.abs( i - v1[t] ) >= k || v2.length >= v1.length ) )
{
v2.push( i );
count( i + 1 );
v2.pop();
}
}
var sum = 0, n = 10, k = 3;
var v1 = [1], v2 = [];
count(2); //1已经排到v1中了
console.log( `总共${sum}种方法.` );
直接在现在这个浏览器里,按F12或ctrl+shift+i(command+option+i),打开console(控制台),把代码复制进去就可出结果。输出结果是2927。