hitman047 2017-01-16 09:50 采纳率: 75%
浏览 1792
已采纳

第六届蓝桥杯 题目“九数组分数” 里面的递归与代码块不是很懂~

public class NO14 {
public static void test(int[] x)
{
int a = x[0]*1000 + x[1]*100 + x[2]*10 + x[3];
int b = x[4]*10000 + x[5]*1000 + x[6]*100 + x[7]*10 + x[8];
if(a*3==b) System.out.println(a + " " + b);
}

public static void f(int[] x, int k)
{
if(k>=x.length){
test(x);
return;
}

for(int i=k; i<x.length; i++){
{int t=x[k]; x[k]=x[i]; x[i]=t;}   //(这里是局部代码块吗?是用来排序的吧~)
f(x,k+1);
//{int t=x[k]; x[k]=x[i]; x[i]=t; }   // 填空(此处代码的确用到了,但是不知道是怎么用的 前面递归完成后应该是跳到test方法里面输出了呀,这里又有什么用呢?)
}
}
public static void main(String[] args)
{
int[] x = {1,2,3,4,5,6,7,8,9};
f(x,0);
}

}

就是,我不懂的是,之前条件不符合的时候,就进入for循环,接着排序,接着又调用f()方法,直到满足if语句里面的条件了,调用test方法,但在test方法里面就已经输出了呀,输出完了才return; 接着才轮到填空处的那段代码执行,按道理来说,前面都已经排过序了,为什么到最后还要排次序,因为排不排都应该对答案没有影响的呀。

问题总结:1. 这里面{}的是局部代码块吗?
2. 那个填空处的代码是怎么运行的,不是应该k>=x.length之后跳转到test方法里面直接输出吗?

谢谢各位dalao的回答,萌新感激不尽~~

  • 写回答

1条回答 默认 最新

  • devmiao 2017-01-16 15:57
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 PointNet++的onnx模型只能使用一次
  • ¥20 西南科技大学数字信号处理
  • ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
  • ¥30 STM32 INMP441无法读取数据
  • ¥15 R语言绘制密度图,一个密度曲线内fill不同颜色如何实现
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧,别用大模型回答,大模型的答案没啥用
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。