代码如下:
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;