50,504
社区成员
发帖
与我相关
我的任务
分享
package jp19042401;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
public class MyClass
{
private static char a[];
private static ArrayList<Character> d=new ArrayList<Character>();
private static int b[];
private static int m;//d的长度
private static int n=5;
private static StringBuffer gSB=new StringBuffer();//用来剔除重复结果
private static int gCount=0;
private static void init()
{
Map<Character, Integer> map=new HashMap<Character, Integer>();
map.put('A',4);
map.put('B',2);
map.put('C',2);
map.put('D',2);
//将map转换为 'A','A','A','A','B','B','C','C','D','D'存入d中,然后再进行组合输出
int i,iCount;
for (Character key : map.keySet()) {
iCount= map.get(key);
for(i=1;i<=iCount;i++)
d.add(key);
}
iCount=d.size()+1;
a=new char[iCount];
b=new int[iCount];
m=iCount-1;
}
private static void dfs(int step)
{
int i;
if(step>n)
{
StringBuffer sBuffer=new StringBuffer();
for(i=1;i<=n;i++)
sBuffer.append(String.format("%2c", a[i]));
sBuffer.append("\r\n");
String s=sBuffer.toString();
sBuffer.setLength(0);
if(gSB.indexOf(s)!=-1) return;
gCount++;
gSB.append(s);
System.out.print(s);
return;
}
for(i=1;i<=m;i++)
if(b[i]==0)
{
a[step]=d.get(i-1);
if(a[step-1]>a[step]) continue;
b[i]=1;
dfs(step+1);
b[i]=0;
}
}
public static void main(String[] args)
{
// TODO 自动生成的方法存根
init();
dfs(1);
System.out.printf("共 %d个答案", gCount);
}
}
package jp19042301;
public class MyClass
{
private static int gCount=0;//计数
private static int a[]=new int[10];//存放结果
private static int b[]=new int[10];//标记数组
private static int c[]={1,3,4,6,7,8};
private static int d[]={0,1,3,6};//首行在数组a中的下标
/*
0
1 2
3 4 5
6 7 8 9
将下三角转换为一维数组a,下三角每一行第一个下标对应一维数组a的[0,1,3,6],
分别检测下标[0,1,2,3,4,5]对应的数值
待检测下标 对应下标1 对应下标2
0 1 2
1 3 4
2 4 5
3 6 7
4 7 8
5 8 9
对应下标2=对应下标1+1,只需用数组c记录对应下标1,c=[1,3,4,6,7,8];
*/
private static void dfs(int step)
{
int i,j,k;
if(step>9)
{
for(i=0;i<=5;i++) //检测下标
if((a[i]>a[c[i]]) | (a[i]>a[c[i]+1])) return;
for(i=0;i<=3;i++)
{
for(j=0;j<=i;j++)
{
k=d[i]+j;
System.out.printf("%3d", a[k]);
}
System.out.println();
}
System.out.println();
gCount++;
return;
}
for(i=1;i<=9;i++)
if(b[i]==0)
{
a[step]=i;
b[i]=1;
dfs(step+1);
b[i]=0;
}
}
public static void main(String[] args)
{
// TODO 自动生成的方法存根
gCount=0;
dfs(1);
System.out.println();
System.out.printf("共 %d个答案", gCount);
}
}
package jp19042201;
public class MyClass
{
public static int retN(int n)
{
if(n==0) return 0;
else if (n==1) return 1;
else return retN(n-1)+n;
}
public static int retAge(int n,int sum)
{
int iRet=-1,t=n;
while(true)
{
sum=sum-t;
if(sum==0)
{
iRet=t;
break;
}
t=t-1;
if(sum<0) return -1;
}
return iRet;
}
public static void main(String[] args)
{
// TODO 自动生成的方法存根
int n=100,sum=0;
for(int i=n;i>0;i--)
{
sum+=retN(i);
}
System.out.printf("%d",sum);//171700
System.out.println();
int iRet;
for(int i=150;i>20;i--)
{
iRet=retAge(i, 236);
if (iRet>0)
{
//System.out.printf("%d至%d", iRet,i);//26至33
System.out.printf("%d", iRet);//26
}
}
}
}