由4个不同的数字,组成的一个乘法算式,它们的乘积仍然由这4个数字组成。
比如:
210 x 6 = 1260
8 x 473 = 3784
27 x 81 = 2187
都符合要求。
如果满足乘法交换律的算式算作同一种情况,那么,包含上边已列出的3种情况,一共有多少种满足要求的算式。
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class 神奇算式 {
static int sum = 0;
static List<String> list = new ArrayList<String>();
private static int a;
private static int b;
private static int c;
private static int d;
private static int sum2 = 0;
private static int sum1 = 0;
public static void main(String[] args) {
for (int i = 1; i < 10; i++) {
go(i + "");
}
System.out.println(list);
System.out.println(list.size());
// 遍历每个字符串
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String s = iterator.next();
check(s);
}
sum = sum1 + sum2 / 2;
System.out.println("共有: " + sum);
}
private static void check(String s) {
char[] array = s.toCharArray();
int[] x = new int[array.length];
for (int i = 0; i < x.length; i++) {
a = Integer.parseInt(String.valueOf(array[i]));
for (int j = 0; j < x.length; j++) {
b = Integer.parseInt(String.valueOf(array[j]));
for (int k = 0; k < x.length; k++) {
c = Integer.parseInt(String.valueOf(array[k]));
for (int l = 0; l < x.length; l++) {
d = Integer.parseInt(String.valueOf(array[l]));
// 判断
if (a != b && a != c && a != d && b != c && b != d
&& d != c) {
if (a * Integer.parseInt(b + "" + c + d) == Integer
.parseInt(s)) {
sum1++;
System.out.println(a + "*" + b + "" + c + d
+ "=" + s);
}
if (Integer.parseInt(a + "" + b)
* Integer.parseInt("" + c + d) == Integer
.parseInt(s)) {
System.out.println(a + "" + b + "*" + c + ""
+ d + "=" + s);
sum2++;
}
}
}
}
}
}
}
private static void go(String s) {
if (s.length() == 4) {
list.add(s);
return;
}
if (s.length() > 4) {
return;
}
for (int i = 0; i < 10; i++) {
String y = s + i;
go(y);
}
}
}
选择题:神奇算式
由4个不同的数字,组成的一个乘法算式,它们的乘积仍然由这4个数字组成。
比如:
210 x 6 = 1260
8 x 473 = 3784
27 x 81 = 2187
都符合要求。
如果满足乘法交换律的算式算作同一种情况,那么,包含上边已列出的3种情况,一共有多少种满足要求的算式。
以下选项错误的是?
A | int main() { int v[5], i; int ans = 0; for (i = 1023; i <= 9876; i++) { v[0] = i / 1000; v[1] = i / 10 % 10; v[2] = i / 100 % 10; v[3] = i % 10; int flag1 = 0, flag2 = 0; if (v[0] != v[1] && v[0] != v[2] && v[0] != v[3] && v[1] != v[2] && v[1] != v[3] && v[2] != v[3]) { do { if (flag1 != 3 && (v[0] * 100 + v[1] * 10 + v[2]) * v[3] == i) { flag1 = 1; ans++; } else if (flag2 != 2 && (v[0] * 10 + v[1]) * (v[2] * 10 + v[3]) == i) { flag2 = 2; ans++; } else if (flag1 != 1 && v[0] * (v[1] * 100 + v[2] * 10 + v[3]) == i) { flag1 = 3; ans++; } } while (next_permutation(v, v + 4)); } } cout << ans; return 0; } |
B |
#define MAX_N 1005 bool judge1(int n) bool judge2(int i, int j) bool judge3(int i, int j) int main() int i, j; |
C |
bool isOk(int result, int t1, int t2) int main() for (j = 1; j * j <= i; j++) return 0; |
D |
int vis[10]; int t = k; k /= 10; |
答案:
int vis[10];
int ans = 0;
bool s(int i)
{
while (i)
{
if (vis[i % 10] == 1)
return false;
else
{
vis[i % 10] = 1;
i /= 10;
}
}
return true;
}
int main()
{
for (int i = 1; i < 999; i++)
{
for (int j = 1; j < 999; j++)
{
memset(vis, 0, sizeof(vis));
if (s(i) && s(j))
{
int k = i * j;
if (k > 9999 || k < 1000)
continue;
int t = k;
while (k)
{
if (vis[k % 10] == 1)
{
vis[k % 10]++;
k /= 10;
}
else
break;
}
if (k == 0 && vis[0] != 1 && vis[1] != 1 && vis[2] != 1 && vis[3] != 1 && vis[4] != 1 && vis[5] != 1 && vis[6] != 1 && vis[7] != 1 && vis[8] != 1 && vis[9] != 1)
{
ans++;
}
}
}
}
cout << ans << endl;
return 0;
}