题目一
小明是个急性子,上小学的时候经常把老师写在黑板上的题目抄错了。有一次,老师出的题目是:36 x 495 = ? 他却给抄成了:396 x 45 = ? 但结果却很戏剧性,他的答案竟然是对的!!因为 36 * 495 = 396 * 45 = 17820 类似这样的巧合情况可能还有很多,比如:27 * 594 = 297 * 54 假设 a b c d e 代表1~9不同的5个数字(注意是各不相同的数字,且不含0) 能满足形如: ab * cde = adb * ce 这样的算式一共有多少种呢?请你利用计算机的优势寻找所有的可能,并回答不同算式的种类数。满足乘法交换律的算式计为不同的种类,所以答案肯定是个偶数。注意:只提交一个表示最终统计种类数的数字,提交解答过程和计算结果图。
操作内容:
package com.jeesite.modules.aaa;
public class Test {
public static void main(String[] args) {
int temp=0;//计算总数
for(int a=1;a<10;a++)
{
for(int b=1;b<10;b++)
{
if(b!=a)
{
for(int c=1;c<10;c++)
{
if(c!=a&&c!=b) {
for(int d=1;d<10;d++)
{
if(d!=a&&d!=b&&d!=c)
{
for(int e=1;e<10;e++)
{
if(e!=a&&e!=b&&e!=c&&e!=d)
{
int flag1=a*10+b;
int flag2=c*100+d*10+e;
int flag3=a*100+d*10+b;
int flag4=c*10+e;
if(flag1*flag2==flag3*flag4)
{
temp++;
}
}
}
}
}
}
}
}
}
}
System.out.println(temp);
}
}
此题运行结果如下: 142
题目二
福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式:
ABCDE * ? = EDCBA
他对华生说:“ABCDE应该代表不同的数字,问号也代表某个数字!”
华生:“我猜也是!”
于是,两人沉默了好久,还是没有算出合适的结果来。
请你利用计算机的优势,找到破解的答案。
把 ABCDE 所代表的数字写出来。
思路:循环遍历每个字母可能的情况。
操作内容:
package com.jeesite.modules.aaa;
import java.util.ArrayList;
import java.util.List;
public class Test2 {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
int n = 5;
for (int i = 0; i < n; i++) {
list.add(0);
}
create(list, n);
}
// 产生一个五位数,每位数字都不相同
private static void create(List<Integer> list, int n) {
if (n <= 0) {
jisuan(list);
return;
}
for (int i = 1; i <= 9; i++) {
if (!list.contains(i)) {
list.set(list.size() - n, i);
} else {
continue;
}
create(list, n - 1);
list.set(list.size() - n, 0);
}
}
// 计算是否符合条件
private static void jisuan(List<Integer> list) {
if (list.get(4) > list.get(0)) {//产生的数字只有个位比万位大,才有可能符合条件,所以其他情况不用做计算
int result = list.get(0) * 10000 + list.get(1) * 1000 + list.get(2)
* 100 + list.get(3) * 10 + list.get(4);
int b = fanzhuan(result);
if (b % result == 0) {
System.out.println(result);
}
}
}
// 反转数字
private static int fanzhuan(int i) {
String s = i + "";
String ss = "";
for (i = 0; i < s.length(); i++) {
ss = s.charAt(i) + ss;
}
return Integer.parseInt(ss);
}
}
此题运行结果如下: 21978
题目三
Description
在舞蹈比赛中,三名舞者可以组成一支舞队,现在一共有N+M名舞者,其中有N名舞者擅长芭蕾,剩下M名舞者擅长街舞,这些舞者要参加舞蹈竞赛,比赛要求每支舞队至少有一名擅长芭蕾和一名擅长街舞的舞者,通过编程计算,N+M名舞者最多可以组成多少支舞蹈队?
Input
输入两个整数M,N,其中1<N,M<10000000
Output
最多可以组成的舞蹈队数
Sample Input 1
10 160
Sample Output 1
10
操作内容:
网页提交版本:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int m, n;
do {
Scanner in = new Scanner(System.in);
n = in.nextInt();
m = in.nextInt();
} while (n <= 1 && m >= 10000000);
int count = 0;
while (n > 0 && m > 0) {
n--;
m--;
if (n > m) {
n--;
} else {
m--;
}
if (n >= 0 && m >= 0) {
count++;
}
}
System.out.println(count);
}
}
本地运行代码:
package com.jeesite.modules.aaa;
import java.util.Random;
import java.util.Scanner;
public class Test3 {
public static void main(String[] args) {
int m, n;
do {
Scanner in = new Scanner(System.in);
System.out.println("请输入第一个数据(1<N):");
n = in.nextInt();
System.out.println("请输入第二个数据(M<10000000):");
m = in.nextInt();
} while (n <= 1 && m >= 10000000);
// System.out.println(N+" "+M);
int count = 0;
while (n > 0 && m > 0) {
n--;
m--;
if (n > m) {
n--;
} else {
m--;
}
if (n >= 0 && m >= 0) {
count++;
}
}
System.out.println("N+M名舞者最多可以组成"+count+"支舞蹈队");
}
}
此题运行结果如下:
评论区