一
题目描述
代码
package lan2;
import java.util.Scanner;
public class demo1 {
public static int a;
public static int b[]={1,2,3,4,5,6,7,8,9};
public static int count=0;
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
a=in.nextInt();
dfs(0);
System.out.println(count);
}
public static void dfs(int index)
{
if(index==b.length)
{
if(check(b))
{count++;}
return;
}
for(int i=index;i<b.length;i++)
{
swap(b,index,i);
dfs(index+1);
swap(b,index,i);
}
}
public static void swap(int a[],int i,int j)
{
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
public static boolean check(int b[])//N<1000*1000,所以加号之前最多是6位数
{
for(int i=0;i<6;i++)//加号之前的数
{
int jiafa=change(0,i);
if(jiafa>=a)
continue;
for(int j=i+1;j<8;j++)//被除数
{
int beichushu=change(i+1,j);
int chushu=change(j+1,8);
if(beichushu%chushu==0 && jiafa+beichushu/chushu==a)
return true;
}
}
return false;
}
public static int change(int i,int j)
{
int sum=0;
int a=1;
for(int c=j;c>=i;c--)
{
sum+=b[c]*a;
a=a*10;
}
return sum;
}
}
二
题目描述
代码
package lan2;
public class demo2{
public static int count=0;
public static void main(String[] args) {
digui(5,9,2);
System.out.println(count);
}
public static void digui(int a,int b,int c)//a代表遇到店,b代表遇到花,3代表原来的2斗酒
{
if(a>0)
digui(a-1,b,c*2);
if(b>0)
digui(a,b-1,c-1);
if(a==0 && b==0 && c==1)
count++;
}
}
三
题目描述
代码
package lan2;
public class demo3 {
public static void main(String[] args) {
int a[][]=new int[40][2];
a[1][0]=1;
a[1][1]=0;
a[2][0]=1;
a[2][1]=1;
for(int i=3;i<40;i++)
{
a[i][0]=a[i-1][1]+a[i-2][1];
a[i][1]=a[i-1][0]+a[i-2][0];
}
System.out.println(a[39][1]);
}
}
四
题目描述
代码
package lan2;
import java.util.Scanner;
public class demo4 {
public static char a[][];
static int n;
public static int count=Integer.MAX_VALUE;
public static boolean mark[][];
public static int[][] direction={{1,0},{0,1},{-1,0},{0,-1}};
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
n=in.nextInt();
a=new char[n][n];
mark=new boolean[n][n];
int x=0,y=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
a[i][j]=in.next().charAt(0);
if(a[i][j]=='A')
{
x=i;
y=j;
}
}
}
dfs(x,y,0);
System.out.println(count);
}
public static void dfs(int x,int y,int count1)
{
if(count1>=count)
return;
if(a[x][y]=='B')
{
count=count1;
return;
}
mark[x][y]=true;
for(int i=0;i<4;i++)
{
int x1=x+direction[i][0];
int y1=y+direction[i][1];
if(x1<0 || x1>=n || y1<0 || y1>=n)
continue;
if(a[x1][y1] != a[x][y] && mark[x1][y1]==false)
dfs(x1,y1,count1+1);
}
mark[x][y]=false;
}
}
五
题目描述
代码
package lan2;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
class Node1{
int x;
int y;
int length;
String ss;
public Node1(int x,int y,int z,String ss)
{
this.x=x;
this.y=y;
length=z;
this.ss=ss;
}
}
class demo5{
static char[][] arr=new char[30][50];
static int[][] mark=new int[30][50];
static char[] C={'D','L','R','U'};
static LinkedList<Node1> queue=new LinkedList();
static int[][] direction={{1,0},{0,-1},{0,1},{-1,0}};
static char[] c={'D', 'L', 'R', 'U'};
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
for(int i=0;i<30;i++)
{
String s=in.nextLine();
for(int j=0;j<50;j++)
arr[i][j]=s.charAt(j);
}
bfs();
System.out.println();
}
private static void bfs()
{
Node1 node=new Node1(0,0,0,"");
queue.add(node);
mark[0][0]=1;
while (!queue.isEmpty())
{
node=queue.poll();
if(node.x==29 && node.y==49)
{ System.out.println(node.length);
System.out.println(node.ss);
}
for(int i=0;i<4;i++)
{
int x1=node.x+direction[i][0];
int y1=node.y+direction[i][1];
if(x1>=0 && x1<30 && y1>=0 && y1<50 && arr[x1][y1]=='0' && mark[x1][y1]==0)
{
mark[x1][y1]=1;
Node1 node1=new Node1(x1,y1,node.length+1,node.ss+c[i]);
queue.add(node1);
}
}
}
}
}
六
题目描述
代码
package lan2;
import java.util.LinkedList;
import java.util.Scanner;
public class demo6 {
public static boolean [][] mark=new boolean[8][8];
public static int count=Integer.MAX_VALUE;
public static int direction[][]={{1,2},{1,-2},{2,-1},{2,1},{-2,1},{-2,-1},{-1,-2},{-1,2}};
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int x1=in.nextInt();
int y1=in.nextInt();
int x2=in.nextInt();
int y2=in.nextInt();
System.out.println(bfs(x1,y1,x2,y2));
}
public static int bfs(int a,int b,int c,int d)
{
if(a==c && b==d)
return 0;
LinkedList<int[]> queue=new LinkedList<>();
queue.add(new int[]{a,b,0});
mark[a][b]=true;
while (!queue.isEmpty())
{
int [] p=queue.pollFirst();
a=p[0];
b=p[1];
if(a== c && b==d)
break;
for(int i=0;i<direction.length;i++)
{
int x=a+direction[i][0];
int y=b+direction[i][1];
if(x<0 || x>7 || y<0 || y>7)
continue;
if(mark[x][y])
continue;
queue.add(new int[]{x,y,p[2]+1});
mark[x][y]=true;
if(x==c && y==d)
count=Math.min(count,p[2]+1);
}
}
return count;
}
}
七
题目描述
代码
package lan2;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class demo7 {
private static int []north;
private static int []west;
private static int [][]mark;
private static int n;
private static int [][]direction={{0,1},{1,0},{-1,0},{0,-1}};
private static List<Integer> list=new ArrayList<>();
public static void main(String[] args) {
Scanner in= new Scanner(System.in);
n=in.nextInt();
north=new int[n];
west=new int[n];
mark=new int[n][n];
for(int i=0;i<n;i++)
north[i]=in.nextInt();
for(int j=0;j<n;j++)
west[j]=in.nextInt();
mark[0][0]=1;
north[0]--;
west[0]--;
list.add(0);
dfs(0,0,0);
}
private static void dfs(int x,int y,int num)
{
if(x==n-1 && y==n-1)
{
for(int i=0;i<n;i++)
{
if(north[i]!=0 || west[i]!=0)
return;
}
for(int j=0;j<=num;j++)
{
System.out.print(list.get(j)+" ");
}
return;
}
for(int k=0;k<4;k++)
{
int x1=x+direction[k][0];
int y1=y+direction[k][1];
if(x1>=0 && x1<n && y1<n && y1>=0 && mark[x1][y1]==0 && west[x1]>0&&north[y1]>0 )
{
mark[x1][y1]=1;
north[y1]--;
west[x1]--;
list.add(x1*n+y1);
dfs(x1,y1,num+1);
list.remove(list.size()-1);
mark[x1][y1]=0;
north[y1]++;
west[x1]++;
}
}
}
}
八
题目描述
代码
package lan2;
import java.util.Scanner;
public class demo8 {
public static int count=0;
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int m=in.nextInt();
int n=in.nextInt();
int o=0;
f(m,n,o);
System.out.println(count);
}
public static void f(int m,int n ,int o)
{
if(m<0 || n<0 || o<0)
return;
if(m==0 && n==0)
count++;
f(m-1,n,o+1);
f(m,n-1,o-1);
}
}
九
题目描述
代码
package lan2;
import java.util.Scanner;
import java.util.*;
public class demo9{
static int[] arr;
static int[] visit;
static int m;
private static int count=0;
static int max=0;
static int a=0;
static List<int[]> []listmap;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n=scanner.nextInt();
listmap=new ArrayList[n+1];
visit=new int[n+1];
visit[1]=1;
for (int i=1;i<=n;i++){
listmap[i]=new ArrayList<>();
}
for (int i=0;i<n-1;i++){
int x=scanner.nextInt();
int y=scanner.nextInt();
int z=scanner.nextInt();
listmap[x].add(new int[]{y,z});
listmap[y].add(new int[]{x,z});
}
// 直观打印邻接表
for (int i=1;i<=n;i++){
List<int[]> ints = listmap[i];
for (int[] arr:ints){
System.out.print(arr[0]+" "+ arr[1]+" ");
}
System.out.println();
}
dfs(1,0);
// System.out.println(a);
visit=new int[n+1];
max=0;
visit[a]=1;
dfs(a,0);
System.out.println((max+10+11)*max/2);
}
private static void dfs(int point, int dis) {
if (dis>max){
a=point;
max=dis;
}
for (int i = 0; i <listmap[point].size(); i++) {
int y=listmap[point].get(i)[0];
if (visit[y]==1) continue;
visit[y]=1;
dis+=listmap[point].get(i)[1];
dfs(y,dis);
visit[y]=0;
dis-=listmap[point].get(i)[1];
}
}
}
十
题目描述
代码
package lan2;
import java.util.Scanner;
public class demo10 {
private static int x[][];
private static int count=0;
private static int n;
private static int[] mark;
private static int[] mark1;
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
n=in.nextInt();
mark=new int[n];
mark1=new int[n];
x=new int[n][n];
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
x[i][j]=in.nextInt();
}
dfs(0);
System.out.println(count);
}
private static void dfs(int index)
{
if(index==n)
{
dfs1(0);
return;
}
for(int i=0;i<n;i++)
{
if(mark[index]!=1 && check(index,i) && x[index][i]!=0)
{
x[index][i]=2;
mark[index]=1;
dfs(index+1);
mark[index]=0;
x[index][i]=1;
}
}
}
private static void dfs1(int index)
{
if(index==n) {
count++;
return;
}
for(int i=0;i<n;i++)
{
if(mark1[index]!=1 && check1(index,i) && x[index][i]==1)
{
x[index][i]=3;
mark1[index]=1;
dfs1(index+1);
mark1[index]=0;
x[index][i]=1;
}
}
}
private static boolean check(int a,int b)
{
for(int i=a-1;i>=0;i--)
{
if(x[i][b]==2)
{return false;}
if((b-a+i)>=0 && (b-a+i)<n)
{
if(x[i][b-a+i]==2)
{return false;}
}
if((a+b-i)>=0 && (a+b-i)<n)
{
if(x[i][a+b-i]==2)
{return false;}
}
}
return true;
}
private static boolean check1(int a,int b)
{
for(int i=a-1;i>=0;i--)
{
if(x[i][b]==3)
{return false;}
if((b-a+i)>=0 && (b-a+i)<n)
{
if(x[i][b-a+i]==3)
{return false;}
}
if((a+b-i)>=0 && (a+b-i)<n)
{
if(x[i][a+b-i]==3)
{ return false;}
}
}
return true;
}
}