Java经典编程试题

/*
题目要求:总共打印8行,用五行分析一下解题思路吧;打印如下图形:
空格数:1   2   3   4   
                        1                       1
                    1   2   1                   2
                1   2   4   2   1               3
            1   2   4   8   4   2   1           4
        1   2   4   8  16   8   4   2   1       5
........
经上面的分析可得:该图形总共有5行: ————每一行由空格和具体的数字组成。
                空格数是随着行数的增加而减一,因此该代码可写成:
                for(int i=1;i<=5;i++){//i表示的是所打印的行数
                    for(int k=1;k<=5-i;k++){//k表示所打印的空格数
                        System.out.print("  ");
                    }
                }


                由上面可知,每一行的空格已打印,但是每一行的数字存在什么规律,以及每一行数字所要打印的个数:
        1   2   3   4   
1                        1                       1
2                    1   2   1                   2
3                1   2   4   2   1               3
4            1   2   4   8   4   2   1           4
5        1   2   4   8  16   8   4   2   1       5

        2^0 2^1 2^2 2^3 2^4 2^3 2^2 2^1 2^0
        -4  -3  -2  -1  0   1   2   3   4           x-(0)       1
                                                    x-(-1~1)    3
                                                    x-(-2~2)    5
                                                    x-(-3~3)    7
                                                    x-(-4~4)    9
                                                    
........

因此由上面分析得每一行所打印数字的个数为1-i ~ i-1
        并且每一行随打印的数值都是2的次幂,次幂的规律而是从0~4~0
    第五行———— 所对应的坐标的绝对值与行数差了一个1
    第四行———— 所对应的坐标的绝对值与行数差了一个1
    第三行———— 所对应的坐标的绝对值与行数差了一个1
    .......以此类推
    因此在坐标的绝对值的基础上再加一个1与行数相等,正它们的差刚好是所对应每一行所要打印的第一个数值的次幂数,即2^(坐标的绝对值的基础上再加一个1与行数的差)
    
    ------因此代码可写为:
        for(int m=1-i;m<=i-1;m++){
            System.out.print(Math.abs(m)+1);
        }
[注:再下来就是格式的要求——由于每一行所打印的最高位数值所占的大小为三个空格大小,因此就有输出的格式要求——————代码就可改为:
        System.out.printf("%3.0f",Math.pow(2,i-1-Math.abs(k)));

特别提醒:为什么格式输出是%3.0f,因为Math.pow()——所执行的结果直接为double型,所以为%f,至于4,就是所输出的值所占的空格大小。
]


最后如果改成输入多少行就打印多少行,则只需改代码中的数字五变成一个变量。
*/
class Demo16{
    public static void main(String[] args){
        for(int i=1;i<=5;i++){//i表示的是行数
            for(int j=1;j<=5-i;j++){
                System.out.print("    ");
            }
            for(int k=1-i;k<=i-1;k++){
                System.out.printf("%4.0f",Math.pow(2,i-1-Math.abs(k)));
            }
            System.out.println();
        }
    }
}

import java.util.Scanner;
/*
当输入若干个数字时,在内存中的调用机制————例:
    输入的数字为:1 2 3 4 5 6 0
                nextDouble();———下一个为1
    1           
                nextDouble();———下一个为2
    2
                nextDouble();———下一个为3
    3
                nextDouble();———下一个为4
    4
                nextDouble();———下一个为5
    5
                nextDouble();———下一个为6
    6
                nextDouble();———下一个为0
    0————表示的是循环结束的条件

    对于当输入的数字存放在所定义的num中时————int num=nextInt();
        nextInt();表示的是存放下一个数字
        当用户输入入若干个数字时,这些数字先存放在一个临时存储区,等待被调用
        因此对于While循环来说——形如:
        System.out.print("Enter an integer,the input ends if it is 0:");
        while(true){
            double num=input.nextDouble();
            if(num==0){
                break;
            }
        }
    运行过程如下:
        先是num=1;  与0做判断,如果等于0,跳出循环,否则num=2;再判断,以此类推。
 */
class Demo11{
    public static void main(String[] args){
        Scanner input=new Scanner(System.in);
        int pos=0;//存放的是大于0的数
        int neg=0;//存放的是小于0得数
        double sum=0;//求和
        System.out.print("Enter an integer,the input ends if it is 0:");
        while(true){
            double num=input.nextDouble();
            if(num!=0){
                sum+=num;
                if(num>0){
                    pos++;
                }else{
                    neg++;
                }
            }else{
                break;
            }
        }
        System.out.println("The number of positives is "+pos);
        System.out.println("The number of negatives is "+neg);
        System.out.println("The total is "+sum);
        System.out.println("The average is "+sum/(pos+neg));
    }
}
发布了8 篇原创文章 · 获赞 6 · 访问量 2483

猜你喜欢

转载自blog.csdn.net/Tough_dxx/article/details/104240265
今日推荐