130道基础OJ编程题之: 47 ~ 57 道

news2024/9/24 23:32:10

130道基础OJ编程题之: 47 ~ 57 道

文章目录

  • 130道基础OJ编程题之: 47 ~ 57 道
    • 0. 昔日OJ编程题:
    • 47. BC50 计算单位阶跃函数
    • 48. BC51 三角形判断
    • 49. BC52 衡量人体胖瘦程度
    • 50. BC53 计算一元二次方程
    • 51. BC54 获得月份天数
    • 52. BC55 简单计算器
    • 53. BC56 线段图案
    • 54. BC57 正方形图案
    • 55. BC58 直角三角形图案
    • 56. BC59 翻转直角三角形图案
    • 57. BC60 带空格直角三角形图案
    • 总结:
    • 最后:

OJ技巧

#include <stdio.h>

int main() {
    int a, b;
    while (scanf("%d %d", &a, &b) != EOF) { // 注意 while 处理多个 case
        // 64 位输出请用 printf("%lld") to 
        printf("%d\n", a + b);
    }
    return 0;
}
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            int a = in.nextInt();
            int b = in.nextInt();
            System.out.println(a + b);
        }
    }
}

0. 昔日OJ编程题:

130道基础OJ编程题之: 1~7道_ChinaRainbowSea的博客-CSDN博客

130道基础OJ编程题之: 8~19 道_ChinaRainbowSea的博客-CSDN博客

130道基础OJ编程题之: 20~28_ChinaRainbowSea的博客-CSDN博客_

130道基础OJ编程题之: 29 ~ 38 道_ChinaRainbowSea的博客-CSDN博客

130道基础OJ编程题之: 39 ~ 46 道_ChinaRainbowSea的博客-CSDN博客_oj编程题


47. BC50 计算单位阶跃函数

计算单位阶跃函数_牛客题霸_牛客网 (nowcoder.com)

在这里插入图片描述


c语言实现:

思路: 注意是多组数据的输入测试,使用 if ~ else 语句,进行一个判断即可。

#include<stdio.h>

int main()
{
    int t = 0;
    while(scanf("%d",&t) != EOF)
    {
        if( t > 0)
          printf("%d\n",1);
        else if(t == 0)
          printf("%.1f\n",0.5);
        else 
          printf("%d\n",0);
    }
    
    return 0;
}

java语言实现:

思路: 注意Java当中的多组数据的输入,使用 if ~ else 语句,进行一个判断即可。

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int t = 0;
        while(scanner.hasNextInt()) {
            t = scanner.nextInt();
            if(t > 0)
              System.out.println(1);
            else if(t == 0)
              System.out.println(0.5);
            else 
              System.out.println(0);
        }
    }
}


48. BC51 三角形判断

三角形判断_牛客题霸_牛客网 (nowcoder.com)

在这里插入图片描述


c语言实现:

思路: 多组数据的输入,首先判断是否是三角形(两边之和大于第三边{(a+b > c) && (a+c > b) && (b+c > a)}),如果是三角形:先将比较容易的先判断出来,等边三角形(三边相等: a == c && c == b ),等腰三角形(两边相等: (a == b) || (a == c) || (b == c) )

#include <stdio.h>

int main()
{
    int a = 0;
    int b = 0;
    int c = 0;

    // 多组数据的输入
    while(scanf("%d%d%d",&a,&b,&c) != EOF) 
    {
        // 判断是否是三角形: 两边之和大于第三边
        if((a+b > c) && (a+c > b) && (b+c > a))
        {
            // 等边三角形
            if(a == c && c == b)
            {
                printf("Equilateral triangle!\n");
                
            } // 等腰三角形
            else if((a == b) || (a == c) || (b == c)) 
            {
                printf("Isosceles triangle!\n");
            } 
            else // 其余三角形
            {
                printf("Ordinary triangle!\n");
            }
        } 
        else
        {
            printf("Not a triangle!\n");
        }
    }

    return 0;
}

java代码实现:

方式一:

思路: Java当在中的多组输入,其中的空格分隔,默认就是多个数据的输入的分隔。首先判断是否是三角形(两边之和大于第三边{(a+b > c) && (a+c > b) && (b+c > a)}),如果是三角形:先将比较容易的先判断出来,等边三角形(三边相等: a == c && c == b ),等腰三角形(两边相等: (a == b) || (a == c) || (b == c) )

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int a = 0;
        int b = 0;
        int c = 0;

        // 多组输入数据
        while(scanner.hasNextInt()) {
            a = scanner.nextInt();
            b = scanner.nextInt();
            c = scanner.nextInt();

            // 判断三角形
            if((a + b > c) && ( a + c > b) && ( b + c > a)) {

                // 等边三角形
                if((a == b) && (b == c)) {
                    System.out.println("Equilateral triangle!");

                    // 等腰三角形
                } else if((a == b) || (b == c) || ( a == c)) {
                    System.out.println("Isosceles triangle!");
                } else {  // 其余三角形
                    System.out.println("Ordinary triangle!");
                }             
            } else {
                System.out.println("Not a triangle!");
            }
        }
    }
}

方式二:

思路: 主要的思路方法是和方式一的思路是一样的,这里主要与方式一不同的是:多组数据的输入以字符串 的方式输入: 先将数据以字符串的形式读取到,再将读取到的字符串以 空格 的格式分割开成单个的字符串,存储到字符串数组 当中,再将字符串数组中的字符串元素转换为对应的 Integer 基本数据类型的包装类数组,再通过包装类自动拆箱转换为 int 类型的数据,进行判断。

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // 注意需要读取到“空格”分割
        while(scanner.hasNextLine()) { 
            String str = scanner.nextLine();  // 需要“空格”

            String strs[] = str.split(" ");  // 以 "空格" 分割,存储到字符串数组当中
            int[] arr = new int[3];  // 存放转为 int 类型的数据

            // 循环将分割好的字符串,转换为 int 的数据类型
            for(int i = 0; i < strs.length; i++) {
                arr[i] = Integer.parseInt(strs[i]);  // 通过包装类将字符串转换为对应的(自动拆箱) int 类型的数据,注意:已经是字符串了,就不要加双引号了
            }

            // 判断三角形
            if((arr[0] + arr[1] > arr[2]) && (arr[0] + arr[2] > arr[1]) && (arr[1] + arr[2] > arr[0])) {

                // 等边三角形
                if((arr[0] == arr[1]) && (arr[1] == arr[2])) {
                    System.out.println("Equilateral triangle!");
                } else if((arr[0] == arr[1]) || (arr[1] == arr[2]) || (arr[0] == arr[2])) {  // 等腰三角形
                System.out.println("Isosceles triangle!");
                } else {  // 其余三角形
                    System.out.println("Ordinary triangle!");
                }

            } else {
                System.out.println("Not a triangle!");
            }
        }

    }
}


49. BC52 衡量人体胖瘦程度

衡量人体胖瘦程度_牛客题霸_牛客网 (nowcoder.com)

在这里插入图片描述


C语言实现:

思路: 多组输入, BMI 的计算方式: 体重 / (身高 * 身高) ; 需要注意的是这里的身高的单位是 cm 厘米,需要转换为 m 米,以及注意最后计算得到的结果是 小数(浮点数)。

#include<stdio.h>

int main()
{
    int weight = 0;
    int height = 0;

    while(scanf("%d%d",&weight,&height) != EOF)
    {
        // 注意结果是 浮点数: 
        double bmi = weight / ((height/100.0) * (height/100.0));

        if(bmi < 18.5) 
            printf("Underweight\n");
        else if(bmi >= 18.5 && bmi <= 23.9)
            printf("Normal\n");
        else if(bmi > 23.9 && bmi <= 27.9)
            printf("Overweight\n");
        else if(bmi > 27.9)
            printf("Obese\n"); 
    }

    return 0;
}

Java实现:

方式一:

思路: 和C语言的思路是一样的,需要注意的是 Java中的多组输入。Math.pow(数值,几次幂)

import java.util.Scanner;

public class Main {
    private static Scanner scanner = new Scanner(System.in);
    public static void main(String[] args) {
        double weigth = 0;
        double heigth = 0;

        while(scanner.hasNextDouble()) {
            weigth = scanner.nextDouble();
            heigth = scanner.nextDouble();

            double bmi = weigth / Math.pow(heigth/100,2.0);

            if(bmi < 18.5) 
                System.out.println("Underweight");
            else if(bmi >= 18.5 && bmi <=  23.9)
                System.out.println("Normal");
            else if(bmi > 23.9 && bmi <= 27.9)
                System.out.println("Overweight");
            else 
                System.out.println("Obese");

        }
    }
}

方式二:

思路: 基本思路和方式一是一样的,不同的是这里将以 字符串 的方式读取其中的数值,再将字符串以 “空格”的方式分割,存储到字符串数组当中,再将字符串数组中的字符串元素转换为对应的包装类 ——> 基本数据类型,再判断

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 多组输入,注意需要“空格”分割
        while(scanner.hasNextLine()) {
            String str = scanner.nextLine();

            String[] strs = str.split(" ");  // 将字符串以"空格"分割
            
            int[] arr = new int[strs.length];

            for(int i = 0; i < strs.length; i++) {
                arr[i] = Integer.parseInt(strs[i]); // 将字符串转换为包装类->拆包为基本数据类型 int ,已经是字符串了就不要再加 "双引号"了
            }

            double bmi = arr[0] / Math.pow(arr[1]/100.0,2);

            if(bmi < 18.5) 
                System.out.println("Underweight");
            else if(bmi >= 18.5 && bmi <=  23.9)
                System.out.println("Normal");
            else if(bmi > 23.9 && bmi <= 27.9)
                System.out.println("Overweight");
            else 
                System.out.println("Obese");
        }
    }
}


50. BC53 计算一元二次方程

计算一元二次方程_牛客题霸_牛客网 (nowcoder.com)

在这里插入图片描述

C语言实现:

思路: 多组输入数据,根据 △ 值划分情况

  • △ = 0,则两个实根相等。其中还需要注意的是当 (-b)/(2*a) = 0.00 的时候,存在正负之分,所以我们需要进一步判断,当 == 0.00 的时候就输入出 0.00 没有正负之分。
  • △ > 0,则两个实根不等。求各个 x1,x2 的值,使用公式: x1 = (-b+sqrt(disc)) / (2*a) ; x2 = (-b+sqrt(disc)) / (2*a)
  • △ < 0,则有两个虚根,则输出:x1=实部-虚部i;x2=实部+虚部i,即x1的虚部系数小于等于x2的虚部系数,实部为0时不可省略。实部= -b / (2*a),虚部= sqrt(-△ ) / (2*a)
  • 所有实数部分要求精确到小数点后2位,数字、符号之间没有空格。
#include<stdio.h>
#include<math.h>

int main()
{
    double a = 0.0;
    double b = 0.0;
    double c = 0.0;

    while(scanf("%lf%lf%lf",&a,&b,&c) != EOF)
    {
        if(a != 0)
        {
            double disc = b*b - 4*a*c;

            if(disc == 0) 
            {
                double temp =  (-b)/(2*a);

                if(temp == 0)
                    printf("x1=x2=%.2lf\n",0.00);
                else
                printf("x1=x2=%.2lf\n",temp);
            }
            else if(disc > 0) 
            {
                double num1 = (-b-sqrt(disc)) / (2*a);
                double num2 = (-b+sqrt(disc)) / (2*a);
                printf("x1=%.2lf;x2=%.2lf\n",num1,num2);
            }
            else
            {
                double num3 = (-b)/(2*a);  // 实部
                double num4 = sqrt(-disc)/(2*a);  // 虚部

                printf("x1=%.2lf-%.2lfi;x2=%.2lf+%.2lfi\n",num3,num4,num3,num4);
            }
        }
        else
        {
            printf("Not quadratic equation\n");
        }
    }

    return 0;
}

Java实现:

思路: 基本思路和C语言实现一样。需要注意的是:Java当中的 System.out.printf(“%f”) 的格式输出,中的浮点数类型没有 %lf ,有的是 %f 。这一点需要注意。

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        // 多组输入
        while(scanner.hasNextDouble()) {
            double a = scanner.nextDouble();
            double b = scanner.nextDouble();
            double c = scanner.nextDouble();

            if(a != 0) {
            
                double disc = b*b - 4*a*c;

                if(disc == 0) {
                    double temp =  (-b)/(2*a);

                    if(temp == 0)
                        System.out.printf("x1=x2=%.2f\n",0.00);
                    else
                        System.out.printf("x1=x2=%.2f\n",temp);
                }
                else if(disc > 0) {
                    double num1 = (-b-Math.sqrt(disc)) / (2*a);
                    double num2 = (-b+Math.sqrt(disc)) / (2*a);
                    System.out.printf("x1=%.2f;x2=%.2f\n",num1,num2);
                }
                else {
                    double num3 = (-b)/(2*a);  // 实部
                    double num4 = Math.sqrt(-disc)/(2*a);  // 虚部

                    System.out.printf("x1=%.2f-%.2fi;x2=%.2f+%.2fi\n",num3,num4,num3,num4);
                }
            } else {
                System.out.printf("Not quadratic equation\n");
            }

            
        }
        
    }
}


51. BC54 获得月份天数

获得月份天数_牛客题霸_牛客网 (nowcoder.com)

在这里插入图片描述

C语言实现:

思路: 多组输入。将各个不是月份的天数存储到数组当中去。再判断输入的是否是 2 月,是 2月,进行一个闰年的判断,是闰年 + 1 天。需要注意的是我们数组实际是从下标 为 0 的位置开始的,所以我们从数组中实际的取值是 需要 - 1 .

#include<stdio.h>

int main()
{
    int year = 0;
    int month = 0;
    int days[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; // 记录每月的天数信息

    while(~scanf("%d%d",&year,&month)) 
    {
        
        // 判断闰年
        if( month == 2) 
        {
            month --;
            if( (year % 4 == 0  && year % 100 != 0) || (year % 400 == 0) )
            {
                printf("%d\n",days[month]+1);
            }
            else 
                printf("%d\n",days[month]);
        }
        else
            printf("%d\n",days[--month]);
    }

    return 0;
}

方式二:

思路: 输出的天数存储到一个变量当中,最后进行一个输出。

#include<stdio.h>

int main()
{
    int year = 0;
    int month = 0;
    int days[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; // 记录每月的天数信息

    while(~scanf("%d%d",&year,&month)) 
    {
        int day = days[month -1];  // 实际数组是从 0 开始的
        // 判断闰年
        if( month == 2) 
        {
            if( (year % 4 == 0  && year % 100 != 0) || (year % 400 == 0) )
                ++day;  // 闰年的 2月 加 一天
        }
        
        printf("%d\n",day);
    }

    return 0;
}

java实现:

方式一:

思路: C语言实现的方式二的基本思路一致。

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int[] days = { 31,28,31,30,31,30,31,31,30,31,30,31 };

        Integer year = 0;
        Integer month = 0;

        // 多组输入
        while(scanner.hasNextInt()) {
            year = scanner.nextInt();
            month = scanner.nextInt();
            
            Integer day = days[month -1];

            if(2 == month)
                // 闰年判断
                if((year % 4 == 0 && year % 100 != 0 ) || (year % 400 == 0) )
                    ++day;
            System.out.println(day);
        } 
    }
}

方式二:

思路: 要的思路方法是和方式一的思路是一样的,这里主要与方式一不同的是:多组数据的输入以字符串 的方式输入: 先将数据以字符串的形式读取到,再将读取到的字符串以 空格 的格式分割开成单个的字符串,存储到字符串数组 当中,再将字符串数组中的字符串元素转换为对应的 Integer 基本数据类型的包装类数组,再通过包装类自动拆箱转换为 int 类型的数据,进行判断。

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int[] days = { 31,28,31,30,31,30,31,31,30,31,30,31 }; // 记录每月的天数信息
        // 多组数据的读取,需要“空格”
        while(scanner.hasNextLine()) {
            String str = scanner.nextLine();  // 读取空格的字符串

            String[] strs = str.split(" ");  // 将字符串以 "空格"分割

            int[] arr = new int[strs.length];  // 存放将字符串转换为基本数据类型的数据

            for(int i = 0; i < strs.length;i++) {
                arr[i] = Integer.parseInt(strs[i]);  // 通过包装类将字符串转换为 int的基本数据类型
            }

            int day = days[arr[1] - 1];  // 存放天数

            if(arr[1] == 2) {
                // 判断闰年
                if((arr[0] % 4 == 0 && arr[0] % 100 != 0) || (arr[0] % 400 == 0)) {
                    ++day;  // 闰年 2月加 一天 +1
                }
            }

            System.out.println(day);


        }
    }
}


52. BC55 简单计算器

简单计算器_牛客题霸_牛客网 (nowcoder.com)

在这里插入图片描述

C语言实现:

思路: 多组数据的输入,根据题意:使用 switch()多分支语句

  • +,-,*,/ ; 除法需要进一步的判断,除数不可以为 0 ,从而导致出错,特殊处理,
  • 如果输入的符号不对,特殊处理
  • 需要注意的是 所有数值保留 4 位有效数值
#include<stdio.h>

int main()
{
    double num1 = 0;
    double num2 = 0;
    char symbol = 0;

    while(~scanf("%lf%c%lf",&num1,&symbol,&num2)) {
        
        switch(symbol) {
            case '+':
            printf("%.4lf+%.4lf=%.4lf\n",num1,num2,num1 + num2);
            break;
            case '-':
            printf("%.4lf-%.4lf=%.4lf\n",num1,num2,num1-num2);
            break;
            case '*':
            printf("%.4lf*%.4lf=%.4lf\n",num1,num2,num1*num2);
            break;
            case '/':
            if(num2 == 0)
                printf("Wrong!Division by zero!\n");
            else 
                printf("%.4lf/%.4lf=%.4lf",num1,num2,num1/num2);
            break;
            default:
            printf("Invalid operation!\n");
            break;
        }
    }

    return 0;
}

Java实现:

思路: 和C语言实现的思路是一样的,不同的是,这里我们将字符改为字符串的判断。

因为这里Java当没有像C语言的一个格式输入,所以这里我们就将输入的数据以字符串的方式读取到,然后将读取到的字符串根据 str.split(“[+\-*/]”); 加减乘除进行一个分割存储到字符串数组当中,并判断字符串数组当中的元素是否被分成了两部分,如果输入的运算符是不正确的或者无输入,则字符串是无法进行分割成两个部分的。从而就根据题意的要求输出:Invalid operation!。

输出的运算符是正确的再进行一个判断运算,先将字符串通过包装了转换为对应的 double 基本数据类型,进行运算,

运算之前,先将存在到读取到的字符串中的运算符使用 ,String.substing()的方法将其中的运算符截取获取到,再经过 switch()的多分支判断,需要注意的是这里的是字符串,不是字符,同时注意:Java当中的对于浮点数的格式输出是没有 %lf 的只有 %f,整数的格式输出也是一样的没有 %ld 只有 %d。

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        String str = scanner.next();  // 读取到字符串,这里不需要空格

        String[] strs = str.split("[+\\-*/]"); // 通过+-*/进行字符串的分割,存储到字符串数组当中
        if(strs.length < 2) {
            // 如果没有输入正确的运算符或者无输入,则字符串是无法进行分割成两个部分
            System.out.println("Invalid operation!");
        } else {
            // 输入正确,将字符串通过包装类转换为对应的数值类型 double 
            double num1 = Double.parseDouble(strs[0]);  // 需要注意的是已经是字符串了就不要再加"双引号"了
            double num2 = Double.parseDouble(strs[1]);

            // 通过 字符串.substring()的方法截取其中的符号,进行一个+-*/
            // 就是第一个字符串的后面的一个符号大小
            String symbol = str.substring(strs[0].length(),strs[0].length()+1);

            switch(symbol) {  // 注意是字符串,不是字符
            case "+":
                System.out.printf("%.4f+%.4f=%.4f\n", num1, num2, num1 + num2);
            break;
            case "-":
                System.out.printf("%.4f-%.4f=%.4f\n", num1, num2, num1 - num2);
                break;
            case "*":
                System.out.printf("%.4f*%.4f=%.4f\n", num1, num2, num1 * num2);
                break;
            case "/":
                if (num2 == 0)
                    System.out.printf("Wrong!Division by zero!\n");
                else
                    System.out.printf("%.4f/%.4f=%.4f", num1, num2, num1 / num2);
                break;
            default:
                System.out.printf("Invalid operation!\n");
                break;
            }

        }
        
    }
}


53. BC56 线段图案

线段图案_牛客题霸_牛客网 (nowcoder.com)

在这里插入图片描述


C语言实现:

思路: 注意多组输入的数据

#include<stdio.h>

int main()
{
    int n = 0;
    while(scanf("%d",&n) != EOF)
    {
        for(int i = 0; i < n; i++)
        {
            printf("*");
        }
        printf("\n");
    }
    return 0;
}

Java实现

思路: 注意Java的多组输入数据

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        while(scanner.hasNextInt()) {
            int n = scanner.nextInt();
            for(int i = 0; i < n; i++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}


54. BC57 正方形图案

正方形图案_牛客题霸_牛客网 (nowcoder.com)

在这里插入图片描述


C语言实现:

思路: 多组输入,使用两个 for 循环,行,列

#include<stdio.h>

int main()
{
    int n = 0;

    while(~scanf("%d",&n)) 
    {
        for(int i = 0; i < n; i++) 
        {
            for(int j = 0; j < n; j++)
            {
                printf("* ");
            }
            printf("\n");
        }
            
    }

    return 0;
}

Java实现

思路: 多组输入,使用 两个 for循环,行,列

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        while(scanner.hasNextInt()) {
            int n = scanner.nextInt();

            for(int i = 0; i < n; i++) {
                for(int j = 0; j < n; j++) {
                    System.out.print("* ");
                }
                System.out.println();
            }
        }
    }
}


55. BC58 直角三角形图案

直角三角形图案_牛客题霸_牛客网 (nowcoder.com)

在这里插入图片描述


C语言实现

思路: 多组输入,找规律,两个 for 循环

#include<stdio.h>

int main()
{
    int n = 0;
    
    while(~scanf("%d",&n)) 
    {
        for(int i = 0; i < n; i++) 
        {
            for(int j = 0; j <= i; j++)
            {
                printf("* ");
            }
            printf("\n");
        }
    }

    return 0;
}

Java实现:

思路: 多组输入,找规律,两个 for 循环

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        while(scanner.hasNextInt()) {
            int n = scanner.nextInt();

            for(int i = 0; i < n ; i ++) {
                for(int j = 0; j <= i; j++) {
                    System.out.print("* ");
                }
                System.out.println();
            }
        }
    }
}


56. BC59 翻转直角三角形图案

翻转直角三角形图案_牛客题霸_牛客网 (nowcoder.com)

在这里插入图片描述


C语言实现:

思路: 多组输入,找规律,两个 for 循环,行,列

#include<stdio.h>


int main()
{
    int n = 0; 
    while(scanf("%d",&n) != EOF) {
        for(int i = 0; i < n; i ++) {
            for(int j = 0; j < n-i; j++) {
                printf("* ");
            }
            printf("\n");
        }
    }

    return 0;
}

Java实现:

思路 多组输入,找规律,两个 for 循环,行,列

import java.util.Scanner;

public class Main{
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        while(scanner.hasNextInt()) {
            int n = scanner.nextInt();

            for(int i = 0; i < n; i++) {
                for(int j = 0; j < n - i; j++) {
                    System.out.print("* ");
                }
                System.out.println();
            }
        }
    }
}


57. BC60 带空格直角三角形图案

带空格直角三角形图案_牛客题霸_牛客网 (nowcoder.com)

在这里插入图片描述


C语言实现:

方式一:

思路: 多组输入,找规律:注意是两个“空格”

#include <stdio.h>

int main() 
{
    int n = 0;
    
    while(~scanf("%d",&n))
    {
        for(int i = 0; i < n; i++) 
        {
            for(int j = 0; j < n-i-1; j++) 
            {
                printf("  ");  // 注意是两个“空格”
            }

            for(int j = 0; j <= i;j++) 
            {
                printf("* ");
            }
            printf("\n");
        }
    }
    return 0;
}



方式二:

思路:

在这里插入图片描述

#include <stdio.h>

int main()
{
    int n = 0;
    while(scanf("%d",&n) != EOF) 
    {
        for(int i = 0; i < n; i++) 
        {
            for(int j = 0; j < n; j++) {
                // 打印“空格”
                if( i + j < n - 1)
                {
                    printf("  "); // 两个空格
                }
                else   // 打印“星号”
                {
                    printf("* ");
                }
                
            }
            printf("\n");
        }
    }

    return 0;
}

Java实现
方式一:

思路: 多组输入,找规律,注意是两个空格

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 多组输入
        while(scanner.hasNextInt()) {
            int n = scanner.nextInt();

            for(int i = 0 ; i < n; i++) {
                // 两个空格
                for(int j = 0 ; j < n-i-1; j++) {
                    System.out.print("  "); 
                }

                // 星号
                for(int j = 0; j <= i; j++) {
                    System.out.print("* "); // 加空格
                }
                System.out.println();
            }
        }
    }
}

方式二:

思路: 和C语言实现的方式二是一样的

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        while(scanner.hasNextInt()) {
            int n = scanner.nextInt();

            for(int i = 0; i < n; i ++) {
                for(int j = 0; j < n; j++) {
                    // 打印空格
                    if( (i + j) < n-1) {
                        System.out.print("  ");  // 两个空格
                    } else {
                        System.out.print("* ");
                    }
                }
                System.out.println();
            }
        }
    }
}

总结:

  1. 注意C语言的多组输入,和Java的多组输入
  2. Java以字符串读取的处理: 多组数据的输入以字符串 的方式输入: 先将数据以字符串的形式读取到scanner.hasNextLine() 需要读取到空格,再将读取到的字符串以 空格 String.split(" ")的格式分割开成单个的字符串,存储到字符串数组 当中,再将字符串数组中的字符串元素转换为对应的 包装类.parseXXX基本数据类型的包装类数组,再通过包装类自动拆箱转换为 基本数据类型的数据。
  3. Java当中求平方的方法:Math.pow(double d,double b) 其中第一个参数表示:要平方的数,第二个参数表示:几次方
  4. Java当中的 System.out.print("%d,%f") 的格式输出,整数只有 %d 没有 %ld, 浮点数只有 %f,没有 %lf
  5. java当中的 String[] strs = str.split("[+\\-*/]"); 可以使用 String.split() 进行多个标志进行分割。
  6. Java当中的 String symbol = str.substring(strs[0].length(),strs[0].length()+1); 中的 String.substring()方法进行字符串的截断。
  7. 两个 for 循环控制,行,列。

最后:

限于自身水平,其中存在的错误,希望大家给予指教,韩信点兵——多多益善,谢谢大家,江湖再见,后会有期!!!

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/130226.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【生信】初探蛋白质性质和结构分析

实验目的 熟悉蛋白质序列和结构的主要分析内容在实践中逐步理解蛋白质序列和结构的主要分析算法的基本原理 实验内容 综合使用多种在线工具&#xff0c;对蛋白质的一级、二级和三级结构进行分析和预测综合使用多种在线工具&#xff0c;对蛋白质的跨膜结构、翻译后修饰、亚细…

第二十八讲:神州路由器地址转换的配置

实验拓扑图如下所示 设置内网地址段为192.168.0.0,S0/1为外网出口。通过nat访问192.168.2.0网段。 操作步骤&#xff1a; 步骤1&#xff1a;连接网络拓扑结构图。 步骤2&#xff1a;配置计算机的IP地址、子网掩码和网关。 步骤3&#xff1a;设置Router-B的接口IP地址和DCE的…

linux0.11+Bochs环境搭建和使用

Linux 系统的创始人在一篇新闻组投稿上所说的&#xff0c;要理解一个软件系统的真正运行机制&#xff0c;一定 要阅读其源代码&#xff08;RTFSC – Read The Fucking Source Code&#xff09;。系统本身是一个完整的整体&#xff0c;具有很多看似 不重要的细节存在&#xff0c…

声明式事物的属性之只读、超时、回滚策略

声明式事物的属性之只读、超时、回滚策略 1. 事务属性&#xff1a;只读 ①介绍 对一个查询操作来说&#xff0c;如果我们把它设置成只读&#xff0c;就能够明确告诉数据库&#xff0c;这个操作不涉及写操作。这样数据库就能够针对查询操作来进行优化。 ②使用方式 Overri…

zabbix报警方式,邮件报警和微信报警。

整理csdn时候发现了一篇2016年整理zabbix报警不知道当时啥情况没有发布出去&#xff0c;凑个数重新发布 最近这些天都在弄Zabbix不再只是简单的监控物理硬件&#xff0c;服务端口&#xff0c;流量图等。让Zabbix的功能发挥到极致。 本篇博客只做笔记介绍zabbix的报警&#xff…

【数据结构与算法】顺序队列与环形队列

文章目录一 顺序队列1 应用场景2 基本概念&#xff08;1&#xff09;基本介绍&#xff08;2&#xff09;队列的顺序实现&#xff08;3&#xff09;队列的入队和出队操作&#xff08;4&#xff09;使用数组模拟队列3 代码实现&#xff08;1&#xff09;初始化队列&#xff08;2&…

React Native windows环境搭建

1.首先准备下载必须的依赖&#xff1a;Node、JDK 、Android Studio、夜神模拟器 ①Node可以直接到 官网 下载&#xff0c;版本必须大于14&#xff0c;我这边用的是v16.15.1 ②Jave JDK&#xff0c;我直接在360软件管家安装的&#xff0c;搜的是JDK 11&#xff0c;React Nativ…

【算法】双指针、位运算、离散化、合并区间

文章目录1.双指针2.位运算3.离散化4.区间合并1.双指针 双指针的算法可以优化时间复杂度,双指针&#xff0c;指的是在遍历对象的过程中&#xff0c;不是普通的使用单个指针进行访问&#xff0c;而是使用两个相同方向&#xff08; 快慢指针 &#xff09;或者相反方向&#xff08…

SQL调优SQLSERVER 数据页

1. 什么是数据页 一般来说&#xff0c;对大块资源或者数据进行高效管理都会按照一定粒度来划分的&#xff0c;比如说 Windows 对内存的管理就是按照 内存页 (4k) 来进行划分&#xff0c;言外之意就是 SQLSERVER 对 mdf 的管理也是按照 数据页 &#xff08;8k) 来划分的&#x…

(小记)matlab散点图

Matlab散点图两种画法一、plot画散点图二、scatter画散点图三、matlab工具画散点图plot画我可以设置坐标轴之类的&#xff0c;方便论文使用&#xff1b;scatter没设置成功。一、plot画散点图 参考&#xff1a;matlab中二维散点图,MATLAB实例&#xff1a;二维散点图 自用代码 …

一站式迁移,人大金仓助力保险业务无感升级

2021年3月&#xff0c;国家发布《中华人民共和国国民经济和社会发展第十四个五年规划和2035年远景目标纲要》&#xff0c;纲要明确提出“稳妥发展金融科技&#xff0c;加快金融机构数字化转型”、“推进金融业信息化核心技术安全可控&#xff0c;维护金融基础设施安全”。2022年…

如果通过股价均线分析股票

目录如果通过股价均线分析股票获取数据为什么要计算均价计算均价分析结果如果通过股价均线分析股票 获取数据 股票数据获取渠道非常丰富&#xff0c;可以通过上一篇文章 各大股票开放接口介绍中接口获取数据&#xff0c;需要提供技术支持的可以私聊。 为什么要计算均价 股票…

MongoDB:基础概述

MongoDB 是一个开源的、跨平台的、面向文档的、基于分布式文件存储的数据库系统&#xff0c;MongoDB 是由 C 语言开发&#xff0c;旨在为 Web 应用提供可扩展的高性能数据存储解决方案。在高负载的情况下&#xff0c;通过添加更多的节点&#xff0c;可以保证服务器性能。 本篇内…

【技术分享】无纸化会议|智慧教室同屏走RTSP组播还是RTMP?

技术背景 我们在做内网多人同屏&#xff08;比如无纸化会议、智慧教室同屏&#xff09;技术方案的时候&#xff0c;遇到个问题&#xff1a;到底使用轻量级RTSP服务实现组播&#xff0c;还是基于RTMP的解决方案&#xff1f; 先说为什么大家喜欢组播吧&#xff1a; 组播技术方…

js实现复制粘贴剪切功能

文章目录js实现复制粘贴功能方式一&#xff1a;原生方式实现复制粘贴剪切&#xff08;不推荐&#xff09;方式二&#xff1a;浏览器自带clipboard API实现复制粘贴&#xff08;推荐&#xff09;简介特点clipboard对象及相关APIClipboard.readText()Clipboard.read()Clipboard.w…

二叉树之红黑树

红黑树的起源 二分查找具有Ologn的时间复杂度&#xff0c;使用二分查找的基础是数据有序。很明显数组可以完成这一条件&#xff0c;但是数组也有缺点&#xff0c;扩容&#xff0c;增加&#xff0c;删除非常不方便。而链表则没有这些缺点&#xff0c;但是链表却不满足随机存取&…

第二十七讲:神州路由器PPP CHAP认证的配置

实验拓扑图如下所示 操作步骤&#xff1a; 步骤1&#xff1a;连接网络拓扑图。 步骤2&#xff1a;RouterA基本配置。 Router>enable &#xff01;进入特权模式 Router#config &#xff01;进入全局配置模式 …

React jsx 简介与一些语法规则

什么是 Jsx 简单例子&#xff1a; //create virtual dom , single quotes is not needconst VDOM <h1> Hello, React </h1> //appy virtual dom to pageReactDOM.render(VDOM, document.getElementById("test")) //first parameter is virtual dom, …

2022,我们追逐群星,也在追逐AIGC的无尽可能

2022年&#xff0c;是中国人追逐群星的里程碑之年。今年10月31日&#xff0c;中国天宫空间站的第二个科学实验模块——梦天实验舱&#xff0c;搭载长征五号B遥四运载火箭发射升空。随着之后天实验舱成功与之前发射的天和核心舱完成精准对接&#xff0c;中国空间站历史性地完成了…

使用支付宝沙盒 nodejs

1、 进入官网 https://auth.alipay.com/login/index.html 登录 2、下载秘钥转换工具 https://render.alipay.com/p/f/fd-jwq8nu2a/pages/home/index.html 3、生成密钥 注意&#xff0c;此时得到的应用私钥的格式是不对的&#xff0c;应用格式转换转换格式 4、通过3中的应用公钥…