今天的赛事题目,一共四题。。做出来三题,最后一题来不及了,感觉工作量比较大水平太次弄不出来,但是难度还是比较一般
第一题,顺时针打印矩阵,没什么好说的
/**
* Created by zyl on 2017/4/27.
*/
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner in=new Scanner(System.in);
while(in.hasNext()){
int row=in.nextInt();
int col=in.nextInt();
int[][] table=new int[row][col];
for(int i=0;i<row;i++){
for(int j=0;j<col;j++){
table[i][j]=in.nextInt();
}
}
printMatrix(table);
//break;
}
}
public static void printMatrix(int [][] matrix){
if(matrix.length==0||matrix[0].length==0){
return ;
}
int count=0;
int i=0;
int j=0;
boolean[][] table=new boolean[matrix.length][matrix[0].length];
while(count<matrix.length*matrix[0].length){
while(j>=0&&i>=0&&j<matrix[0].length&&i<matrix.length&&table[i][j]==false){
System.out.print(matrix[i][j]);
if(count!=matrix.length*matrix[0].length-1)System.out.print(" ");
count++;
table[i][j]=true;
j++;
}
i++;
j--;
while(j>=0&&i>=0&&j<matrix[0].length&&i<matrix.length&&table[i][j]==false){
System.out.print(matrix[i][j]);
if(count!=matrix.length*matrix[0].length-1)System.out.print(" ");
count++;
table[i][j]=true;
i++;
}
j--;
i--;
while(j>=0&&i>=0&&j<matrix[0].length&&i<matrix.length&&table[i][j]==false){
System.out.print(matrix[i][j]);
if(count!=matrix.length*matrix[0].length-1)System.out.print(" ");
table[i][j]=true;
count++;
j--;
}
i--;
j++;
while(j>=0&&i>=0&&j<matrix[0].length&&i<matrix.length&&table[i][j]==false){
System.out.print(matrix[i][j]);
if(count!=matrix.length*matrix[0].length-1)System.out.print(" ");
table[i][j]=true;
count++;
i--;
}
j++;
i++;
}
}
}
第二题 找一个数组中小于制定数的最大和,其实就是个01背包问题
/**
* Created by zyl on 2017/4/27.
*/
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner in=new Scanner(System.in);
while(in.hasNext()){
int sum=in.nextInt();
int nums=in.nextInt();
int[] table=new int[nums];
for(int i=0;i<table.length;i++){
table[i]=in.nextInt();
}
getMaxDiff(table,sum);
}
}
public static void getMaxDiff(int[] arr,int sum) {
int len = arr.length;
int[][] dp = new int[len + 1][sum+1];
int count=0;
ArrayList<Integer> list=new ArrayList<>();
for(int i=1;i<len+1;i++){
for(int j=1;j<sum+1;j++){
if(j-arr[i-1]>=0&&dp[i-1][j-arr[i-1]]+arr[i-1]>dp[i-1][j]){
dp[i][j]=dp[i-1][j-arr[i-1]]+arr[i-1];
}else{
dp[i][j]=dp[i-1][j];
}
}
}
System.out.print(dp[len][sum]);
}
}
第三题,袋子相同,苹果相同,(可以不放满)但是不能有空袋子,袋子里苹果数量不能一样
/**
* Created by zyl on 2017/4/27.
*/
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner in=new Scanner(System.in);
while(in.hasNext()){
int M=in.nextInt();
int N=in.nextInt();
sum=0;
for(int i=1;i<N;i++){
help(M-1,N-i,i+1);
}
System.out.print(sum);
}
}
static int sum=0;
static void help(int m, int n,int min){//m代表盘子数目,n代表苹果数目
if(n>=0&&m==0){
sum++;
return;
}
if(n<0){
return;
}
for(int i=min;i<=n;i++){
help(m-1,n-i,i+1);
}
}
}
最后一题。。写不出来,时间来不及了,其实就是个广度有限遍历或者深度优先遍历的问题,毕竟深度只到8