昨天去一家公司面试,碰到一道很古老的面试题,就是编写乘法口诀,如下:1*1 = 1
1*2 = 2 2*2 = 4
1*3 = 3 2*3 = 6 3*3 = 9
1*4 = 4 2*4 = 8 3*4 = 12 4*4 = 16
1*5 = 5 2*5 = 10 3*5 = 15 4*5 = 20 5*5 = 25
1*6 = 6 2*6 = 12 3*6 = 18 4*6 = 24 5*6 = 30 6*6 = 36
1*7 = 7 2*7 = 14 3*7 = 21 4*7 = 28 5*7 = 35 6*7 = 42 7*7 = 49
1*8 = 8 2*8 = 16 3*8 = 24 4*8 = 32 5*8 = 40 6*8 = 48 7*8 = 56 8*8 = 64
1*9 = 9 2*9 = 18 3*9 = 27 4*9 = 36 5*9 = 45 6*9 = 54 7*9 = 63 8*9 = 72 9*9 = 81小弟临时写了如下代码,面试官说不是很准确,小弟代码如下:
public class Test{
public static void main(String [] args){
int i = 1;
for(int j =1;j<10;j++){
for (int m =1;m<10;m++){
System.out.print(m + "*" +i +" = "+m*i+" ");
if(m == i){
System.out.println(" ");
i = i+1;
break;
}
}
}
}
}好像没啥问题,哪位大哥有更好的代码啊?

解决方案 »

  1.   

    单层循环!
    for(int i=1,j=1;i<10;){
            System.out.print(i+"*"+j+"="+j*i+"\t");
            if(j<i){
            j++;
            }
            else if(j==i){
            System.out.println();
            j=1;
            i++;
            }
        }
      

  2.   


    i++的时候不必j=1的,直接j=i就好,可以省去一些多余的执行步骤
      

  3.   


    for (int ii = 1; ii < 10; ii++)
            {
                for (int jj = 1; jj <= ii; jj++)
                {
                    System.out.print(ii + "*" + jj + "=" + ii * jj + "  ");
                }
                System.out.println();
            }
      

  4.   

    抱歉,换一下: for (int ii = 1; ii < 10; ii++)
            {
                for (int jj = 1; jj <= ii; jj++)
                {
                    System.out.print(jj + "*" + ii + " = " + ii * jj + " ");
                }
                System.out.println();
            }
      

  5.   

    优化下: for (int i = 1, j = 1; i <= 9;) {
    System.out.print(j + "*" + i + "=" + j * i + "\t");
    if (j == i) {
    System.out.println();
    j = 0;
    i++;
    }
    j++;
    }
      

  6.   

    再来个SQL的,没事写写-- 九九乘法表
    ALTER PROC [dbo].[proc_Test]
    AS
    DECLARE 
    @i int, @j int, @sOut varchar(100);
    SET @i = 1;
    SET @j = 1;
    SET @sOut = '';
    while @j <= 9 
    begin
    set @sOut = @sOut + CAST(@i AS VARCHAR) +'*'+CAST(@j AS VARCHAR)+' = '+CAST(@j*@i AS VARCHAR)+' '

    if @i = @j
    begin
    print @sOut
    set @i = 0;
    set @j = @j + 1;
    set @sOut = '';
    end

    set @i = @i + 1;
    end
      

  7.   

    我写的是public static void main(String[] args) {
    for(int i=1;i<10;i++){
    for(int j=1;j<=i;j++){
    System.out.print(j + " * " + i + " = " + i*j + "\t");
    }
    System.out.println();
    }
        }研究下单层循环