核桃的数量
小张是软件项目经理,他带领3个开发组。工期紧,今天都在加班呢。为鼓舞士气,小张打算给每个组发一袋核桃(据传言能补脑)。他的要求是:
各组的核桃数量必须相同
各组内必须能平分核桃(当然是不能打碎的)
尽量提供满足1,2条件的最小数量(节约闹革命嘛)
import java.util.Scanner;
public class Main {
public static int gys(int a,int b) {
while(true) {
if(a%b==0) {
return b;
}else {
return gys(b,a%b);
}
}
}
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
int c = sc.nextInt();
int temp = gys(a,b);
temp = a*b/temp;
int t = gys(temp,c);
temp = temp*c/t;
System.out.println(temp);
}
}
打印十字图
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
static int t;
public static boolean yuan(int a,int b,int c,int d) {
if(Math.abs(a-2*t-2)+Math.abs(b-2*t-2)>Math.abs(c-2*t-2)+Math.abs(d-2*t-2)) {
return true;
}
return false;
}
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
t = sc.nextInt();
int [][] m = new int[4*t+5][4*t+5];
for(int i=0;i
for(int j=0;j
m[i][j] = -1;
}
}
int[] sx = {2*t+2,2*t,2*t+1,2*t+3,2*t+4,2*t+2,2*t+2,2*t+2,2*t+2};
int[] sy = {2*t+2,2*t+2,2*t+2,2*t+2,2*t+2,2*t,2*t+1,2*t+3,2*t+4};
int[] dx = {1,1,1,0,-1,-1,-1,0};
int[] dy = {1,0,-1,-1,-1,0,1,1};
ArrayList ax = new ArrayList();
ArrayList ay = new ArrayList();
for(int i=0;i
ax.add(sx[i]);
ay.add(sy[i]);
m[sx[i]][sy[i]] = 1;
}
for(int n=0;n
//。
ArrayList tax = new ArrayList();
ArrayList tay = new ArrayList();
for(int in=0;in
for(int i=0;i
int tx = (int)ax.get(in)+dx[i];
int ty = (int)ay.get(in)+dy[i];
if(m[tx][ty]==-1) {
m[tx][ty] = 0;
tax.add(tx);
tay.add(ty);
}
}
}
ax = tax;
ay = tay;
ArrayList ttax = new ArrayList();
ArrayList ttay = new ArrayList();
for(int in=0;in
for(int i=0;i
int tx = (int)ax.get(in)+dx[i];
int ty = (int)ay.get(in)+dy[i];
if(m[tx][ty]==-1) {
m[tx][ty] = 1;
ttax.add(tx);
ttay.add(ty);
}
}
}
ax = ttax;
ay = ttay;
}
for(int i=0;i
for(int j=0;j
if(m[i][j]==1) {
System.out.print('$');
}else {
System.out.print('.');
}
}
System.out.println();
}
}
}
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
//static int[] m = new int[10];
static ArrayList a = new ArrayList();
static int[] dic = new int[10];
; public static void dabiao(int n,int cur) {
if(n==10) {
a.add(cur);
}else if(n==1){
for(int i=1;i<10;i++) {
dic[i] = 1;
dabiao(2,i);
dic[i] = 0;
}
}else {
for(int i=1;i<10;i++) {
if(dic[i]==0) {
dic[i] = 1;
dabiao(n+1,cur*10+i);
dic[i] = 0;
}
}
}
}
public static int qu(int target,int x,int y,int z) {
int res = 0;
for(int i=0;i
int temp = (int)a.get(i);
int num1 = temp%(int)Math.pow(10,z);
temp = temp/(int)Math.pow(10,z);
int num2 = temp%(int)Math.pow(10,y);
temp = temp/(int)Math.pow(10,y);
int num3 = temp%(int)Math.pow(10,x);
if(num2%num1!=0) {
continue;
}
double num = num3 + num2/num1;
if(target==num) {
//System.out.println(num3);
//System.out.println(num2);
//System.out.println(num1);
res++;
}
}
return res;
}
public static void main(String args[]) {
for(int i=0;i
dic[i] = 0;
}
dabiao(1,0);
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int res = 0;
if(n/10==0) {
res = qu(n,1,4,4);
}else if(n/100==0) {
res = qu(n,1,5,3) + qu(n,2,4,3)+qu(n,1,4,4)+qu(n,1,6,2);
}else if(n/1000==0) {
res = qu(n,3,3,3) + qu(n,2,5,2) + qu(n,1,5,3) + qu(n,3,4,2)+qu(n,2,4,3);
}else if(n/10000==0) {
res = qu(n,1,6,2) + qu(n,4,4,1) + qu(n,4,3,2)+qu(n,3,3,3)+qu(n,2,5,2);
}else if(n/100000==0) {
res = qu(n,2,6,1) + qu(n,5,2,2) + qu(n,5,3,1)+qu(n,1,6,2)+qu(n,4,4,1)+qu(n,4,3,2);
}else if(n/1000000==0) {
res = qu(n,1,7,1) + qu(n,6,2,1)+qu(n,2,6,1)+qu(n,5,2,2)+qu(n,5,3,1);
}else if(n/10000000==0) {
res = qu(n,7,1,1)+qu(n,1,7,1)+qu(n,6,2,1);
}else if(n/100000000==0) {
res = qu(n,7,1,1)+qu(n,1,7,1)+qu(n,6,2,1);
}
System.out.println(res);
}
/**
public static void main(String args[]) {
System.out.println(39176/425);
}
**/
}
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
static int[][] row = new int[6][6];
static int[][] col = new int[6][6];
static int[][] area = new int[6][6];
static int[][] map = new int[6][6];//得到分区号
static char[][] value = new char[6][6];
static ArrayList list = new ArrayList();
static void init() {
for(int i=0;i<6;i++) {
for(int j=0;j<6;j++) {
row[i][j] = -1;
col[i][j] = -1;
map[i][j] = -1;
area[i][j] = -1;
value[i][j] = '0';
}
}
}
static void readip(String[] a,String[] b) {
for(int i=0;i
for(int j=0;j
map[i][j] = a[i].charAt(j)-'0';
}
}
for(int i=0;i
int x = b[i].charAt(0)-'0';
int y = b[i].charAt(1) -'0';
int z = b[i].charAt(2)-'A';
row[x][z] = 1;
col[y][z] = 1;
area[map[x][y]][z] = 1;
value[x][y] = b[i].charAt(2);
}
}
static boolean check(int step,int v) {
int x = step/6;
int y = step%6;
for(int i=0;i<6;i++) {
if(row[x][v]==1||col[y][v]==1||area[map[x][y]][v]==1) {
return false;
}
}
return true;
}
static void dfs(int step) {
if(step==36) {
StringBuilder sb = new StringBuilder("");
for(int i=0;i<6;i++) {
for(int j=0;j<6;j++) {
sb.append(value[i][j]);
}
}
list.add(sb.toString());
return;
}
int x = step/6;
int y = step%6;
if(value[x][y]!='0') {
dfs(step+1);
return;
}
for(int i=0;i<6;i++) {
if(check(step,i)) {
row[x][i]=1;
col[y][i]=1;
area[map[x][y]][i]=1;
value[x][y]=(char)('A'+i);
/**
for(int m=0;m<6;m++) {
for(int n=0;n<6;n++) {
System.out.print(value[m][n]);
}
System.out.println();
}
**/
dfs(step+1);
row[x][i]=-1;
col[y][i]=-1;
area[map[x][y]][i]=-1;
value[x][y]='0';
}
}
}
static void show() {
for(int i=0;i
String str = list.get(i);
System.out.println(i+1);
for(int j=0;j<6;j++) {
for(int k=0;k<6;k++) {
System.out.print(str.charAt(j*6+k));
if(k!=5) {
System.out.print(" ");
}else {
System.out.println();
}
}
}
}
}
public static void main(String[] args) {
init();
Scanner sc = new Scanner(System.in);
String[] a = new String[6];
for(int i=0;i<6;i++) {
String tmp = sc.nextLine();
a[i] = tmp;
}
int n = sc.nextInt();
sc.nextLine();
String[] b = new String[n];
for(int i=0;i
String tmp = sc.nextLine();
b[i] = tmp;
}
readip(a,b);
dfs(0);
show();
}
}
疑问:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
long[] m = new long[30100];
int[] v = new int[40];
int[] s = new int[40];
Scanner sc = new Scanner(System.in);
int money = sc.nextInt();
int n = sc.nextInt();
for(int i=0;i
m[i] = 0;
}
sc.nextLine();
for(int i=0;i
int a = sc.nextInt();
int b= sc.nextInt();
v[i] = a*b;
s[i] = a;
sc.nextLine();
}
for(int i=0;i
for(int j=money;j>=s[i];j--) {
m[j] = Math.max(m[j], m[j-s[i]]+v[i]);
}
}
System.out.println(m[money]);
}
}
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int[] v = new int[m + 1];
int[] w = new int[m + 1];
int[][] f = new int[m + 1][n + 1];
for(int i = 1;i <= m;i++){
v[i] = sc.nextInt();
w[i] = sc.nextInt();
}
for(int j = 0;j < n;j++){
f[0][j] = 0;
}
for(int i = 1;i <= m;i++){
for(int j = 0;j <= n;j++){
f[i][j] = f[i-1][j];
if(j >= v[i]){
f[i][j] = Math.max(f[i - 1][j],f[i-1][j - v[i]] + v[i] * w[i]);
}
}
}
System.out.println(f[m][n]);
}
}
这两个写法有什么区别???