ACMjava简单枚举除法,分数拆分,双基回文数,最大乘积
2014-04-17 20:13
411 查看
package com.supermars.practice; import java.io.BufferedInputStream; import java.util.Scanner; public class 简单枚举除法 { static Scanner cin = new Scanner(new BufferedInputStream(System.in)); public static void main(String[] args) { int n = cin.nextInt(); int Max = 98765; for (int i = 1234; i < 98765; i++) { int g = i * n; if (g > Max) continue; if (i < 10000 && noZero(g) == true) { if (isEqu(g, i)) { System.out.println(g + "/0" + i + "=" + n); } } } } private static boolean noZero(int g) { char[] x = (g + "").toCharArray(); for (int i = 0; i < x.length; i++) { if(x[i]=='0') return false; } return true; } private static boolean isEqu(int g, int i) { char[] x = (g + "").toCharArray(); char[] y = (i + "").toCharArray(); if (isToken(x) || isToken(y)) return false; for (int j = 0; j < x.length; j++) { for (int j2 = 0; j2 < y.length; j2++) { if (x[j] == y[j2]) return false; } } return true; } private static boolean isToken(char[] x) { for (int j = 0; j < x.length; j++) { for (int j2 =0; j2 < x.length; j2++) { if (j!=j2 && x[j]==x[j2]) return true; } } return false; } }
--------------------------------
package com.supermars.practice;
import java.io.BufferedInputStream;
import java.util.Scanner;
public class 简单枚举分数拆分 {
static Scanner cin = new Scanner(new BufferedInputStream(System.in));
public static void main(String[] args) {
while (cin.hasNext()) {
double k = cin.nextInt();
double g = 2 * k;
double x = 0;
int cnt = 0;
String s = "";
for (double y = 1; y <= g; y++) {
x = y;
while (x < k * k * k) {
if (k == (x * y) / (y + x)) {
cnt++;
s += ("1/" + (int) k + "=" + "1/" + (int) x + "+"
+ "1/" + (int) y + "\n");
}
x++;
}
}
System.out.println(cnt);
System.out.println(s);
}
}
}
-----------------
package com.supermars.practice;
import java.io.BufferedInputStream;
import java.util.Arrays;
import java.util.Scanner;
public class 简单枚举双基回文数 {
static Scanner cin = new Scanner(new BufferedInputStream(System.in));
public static void main(String[] args) {
loop: while (cin.hasNext()) {
int n = cin.nextInt();
while (true) {
if (isHuiWen(++n) == true) {
System.out.println(n);
continue loop;
}
}
}
}
private static boolean isHuiWen(int n) {
// base 2~8
int cnt = 0;
for (int i = 2; i <= 8; i++) {
String s = baseConvent(i, n);
s = trimBefronZero(s);
char[] sa = s.toCharArray();
int k = 0;
while (sa[k] == sa[sa.length - 1 - k]) {
int mid = (sa.length / 2);
if (k == mid) {
cnt++;
break;
}
k++;
}
if (cnt == 2)
return true;
}
return false;
}
private static String trimBefronZero(String s) {
char sa[] = s.toCharArray();
for (int i = 0; i < sa.length; i++) {
if (sa[i] == '0') {
sa[i] = ' ';
continue;
}
break;
}
String ss = String.valueOf(sa, 0, sa.length).trim();
return ss;
}
private static String baseConvent(int i, int n) {
int s[] = new int[100];
int r = s.length - 1;
while (true) {
int y = i / n;
s[r--] = y;
int t = i % n;
if (t == 0)
break;
}
String str = "";
for (int j = r + 1; j < s.length; j++) {
str += s[j];
}
return str;
}
}
---------------
package com.supermars.practice;
import java.io.BufferedInputStream;
import java.util.Arrays;
import java.util.Scanner;
public class 简单枚举最大乘积 {
final static int MAXN = 1 << 5;
static int A[] = new int[MAXN];
static Scanner cin = new Scanner(new BufferedInputStream(System.in));
public static void main(String[] args) {
while (cin.hasNext()) {
int n = cin.nextInt();
int i = 0;
while (i < n) {
A[i++] = cin.nextInt();
}
long max = 0;
for (int j = 0; j < i; j++) {
for (int j2 = 0; j2 < i; j2++) {
long t = 1;
for (int k = j; k <= j2; k++) {
t *= A[k];
}
if (t > max) {
max = t;
}
}
}
System.out.println(max);
}
}
}