这个编程题怎么做 谢谢解答 5
*注意:【A】、【B】、【C】的值已经帮你存好了,你不需要再修改它们,直接使用即可;
举例:【A】为13,【B】为312,【C】为343,连接成的最大整数应该为34331213,要将它存到变量【结果】里;
编程对象:禾木;
特殊规则:不能删除给出的变量、列表和角色,可以新建变量、列表辅助解题。会进行多次检验,你编写的代码不能永远不停地执行,不能使用【停止全部】代码块。 展开
因为限制了只有三个数字,所以我的思路为:列出所有组合情况,冒泡排序后找到最大值即可。
我使用的是java:
public class T {
public static void main(String[] args) {
int A = 13;
int B = 312;
int C = 343;
//求出所有组合结果,根据排列组合,结果应有以下6种:
//ABC、ACB、BAC、BCA、CAB、CBA
//怕你用的不是java,这里采用通用一些的方法来获得结果集
int[] results = new int[6];
results[0] = getResult(A, B, C);
results[1] = getResult(A, C, B);
results[2] = getResult(B, A, C);
results[3] = getResult(B, C, A);
results[4] = getResult(C, A, B);
results[5] = getResult(C, B, A);
System.out.println("所有组合结果为:");
for (int result : results) {
System.out.println(result);
}
//使用冒泡排序获取最大值
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5 - i; j++) {
if (results[j] > results[j++]) {
int temp = results[j];
results[j] = results[j + 1];
results[j + 1] = temp;
}
}
}
System.out.println("========");
System.out.println("冒泡排序结果为:");
for (int result : results) {
System.out.println(result);
}
System.out.println("========");
System.out.println("所以这些组合中数字最大的为:[" + results[5] + "]");
}
//计算每种组合的结果,计算规则为:
//1、先将y和z组合起来,如果z有n位,组合结果为 yz = y*10的n次方 + z
//2、再将x和yz组合起来,如果yz有n位,组合结果为 xyz = yz*10的n次方 + yz
private static int getResult(int x, int y, int z) {
int yz = (int) (y * Math.pow(10, countNumber(z))) + z;
int xyz = (int) (x * Math.pow(10, countNumber(yz))) + yz;
return xyz;
}
//数一下n有多少位
private static int countNumber(int n) {
int count = 0;
while (n != 0) {
n /= 10;
count++;
}
return count;
}
}
后续还能优化的地方就在于三个数字的排列组合部分,现在用比较傻的写死的方式,未来如果加到4个数字或者其他那就得改代码了
代码就是会挤到一起,我截图给你看下:
运行结果: