搜索工作 |
搜索工作 公司点评 查工资 看趋势
微信

使用微信服务,更方便

职友集>Java面试题 > 一道java面试题

一道java面试题

2015-04-05 06:30:02 阅读( 0 )

2307人 收藏本页

标签:Java面试题

代码如下:

for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
int seqNO = ???;
System.out.println(“连续的数字:”+seqNO);//连续的数字如:1,2,3,4,5,6,7,8,9…….
}
}

for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
int seqNo = 0;
if(i == 0){
seqNo = j+1;
}else{
seqNo = (m)*i + j+1;
}
if(i>0) seqNo += 1;
System.out.println(seqNo);//连续的数字如:1,2,3,4,5,6,7,8,9…….

}
}
请介绍一下你对以上代码的理解,for循环的理解
首先要输出一组连续的数字,
在每个打印语句里获得的n,m,i,j有以下特点:
n,m :不变
i :每循环m次增加1
j :每次增加1
所以seq的表达方式最后为 m*i+j+k k为输出的起始数,从1输出就是 m*i+j+1
既然要求输出的结果是连续的,那么j肯定要作为最后表达式的一环。
即seq = j + **** (****表示未知量)

然后j在一个i循环里取值为 0-m 即输出的结果为 0+****~~m-1+****
在相邻的第二个i循环里面 输出结果同样为 0+****~~m-1+****

要保证第一个循环里最后一个数和第二个循环里第一个数相邻
就要让 m-1+****(第一个循环里的未知量) +1(增量) = 0+****(第二个循环里的未知量)

得出每一个i循环,未知量就需要增加m

刚好i是自增1的,所以得出seq = j+ i*m

因为没有确定起始数,而i和j起始值都为0,最后结果是 seq = m*i+j+k k为输出的起始数

如果m-1>=n-1引用了m进制的概念可以表示,m*i+j,可以表示00到(n-1)(m-1)(注:这里是m进制表示)之间所有的数,且是连续的。
但是m-1<n-1时,就会出现问题,n-1表示m制数是不合法的(二进制里不会出现2),例如二进制的11+1应该等于100但是如果不进位表示成符号21又何尝不可,这样就能表示成当m-1<n-1时,m*i+j就可以表示成00到m(n-1)+m-1内的全部连续的整数。

相当于填充一个a[n]的数组,将数字有序地往数组进行赋值,a[j]=i*m+j+1;

来自IT公司面试手册

下一篇:网龙笔试题java开发工程师

上一篇:实例内部类,静态内部类和局部内部类的区别是什么?

亲~ 如果您有更好的答案 可在评论区发表您独到的见解。

您想查看更多的信息: 面试题