【C语言】牛客网刷题训练-6

本文涉及的产品
云解析DNS,个人版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 【C语言】牛客网刷题训练-6

针对C语言入门OJ题(牛客网)

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

解析:

浮点数除法要保证除号的两端至少有一个浮点数。

参考代码:

//代码一
#include <stdio.h>
int main()
{
    float weight = 0.0;
    float hight = 0.0;
    while(scanf("%f %f", &weight, &hight) != EOF)
    {
        float bmi = weight/(hight*hight/100/100);
        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
        {
            printf("Obese\n");
        }
    }
    return 0;
}
//代码二
#include <stdio.h>
int main()
{
    int weight = 0;
    int hight = 0;
    while(~scanf("%d %d", &weight, &hight))
    {
        float bmi = weight/((hight/100.0)*(hight/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
        {
            printf("Obese\n");
        }
    }
    return 0;
}

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

解析:

  1. 需要根据题目不同的限制条件给出相应的计算结果。
  2. 注意小点数后位数题目有限制。
  3. 注意使用了sqrt()函数,需要引用math.h头文件。

参考代码:

#include <stdio.h>
#include <math.h>
int main()
{
    float a = 0.0;
    float b = 0.0;
    float c = 0.0;
    while(scanf("%f %f %f", &a, &b, &c) != EOF)
    {
        if(a != 0)
        {
            float disc = b*b-4*a*c;//在数学中,△=b^2-4*a*c
            if(disc>0.0)
            {
                //有两个不相等的实数根
                printf("x1=%.2f;x2=%.2f\n",
                       (-b-sqrt(disc))/(2*a),
                       (-b+sqrt(disc))/(2*a)
                      );
            }
            else if(disc < 0.0)
            {
                //有两个虚根
                //写法1
                printf("x1=%.2f-%.2fi;x2=%.2f+%.2fi\n",
                     (-b)/(2*a), sqrt(-disc)/(2*a),
                       (-b)/(2*a), sqrt(-disc)/(2*a));
 
                //写法2
                //float real = (-b)/(2*a);
                //float image = sqrt(-disc)/(2*a);
                //printf("x1=%.2f-%.2fi;x2=%.2f+%.2fi\n",
                //        real, image, real, image);
            }
            else
            {
                //有两个相等的实数根
                printf("x1=x2=%.2f\n", (-b)/(2*a));    
            }
        }
        else
        {
            printf("Not quadratic equation\n");
        }
    }
    return 0;
}

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

解析:

判断闰年,如果是闰年, 2 月多一天,其他都正常。

参考代码:

#include <stdio.h>
int main()
{
    int y = 0;
    int m = 0;
    int days[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; 
    while(scanf("%d%d", &y, &m) != EOF)
    {
        int day = days[m-1];
        if((y%4==0 && y%100!=0) || (y%400==0))
        {
            if(m == 2)
                day += 1;
        }
        printf("%d\n", day);
    }
    return 0;
}

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

解析:

  1. 按照格式接收,按照要求编写代码就行
  2. 这个题使用float精度不满足要求。

参考代码:

#include <stdio.h>
//精度尽量保持高
//这道题如果使用float,精度无法满足要求
int main()
{
    double n1 = 0.0;
    double n2 = 0.0;
    char op = 0;//操作符
    while(scanf("%lf%c%lf", &n1, &op, &n2) != EOF)
    {
        switch(op)
        {
            case '+':
                printf("%.4lf+%.4lf=%.4lf", n1, n2, n1+n2);
            break;
            case '-':
                printf("%.4lf-%.4lf=%.4lf", n1, n2, n1-n2);             
            break;
            case '*':
                printf("%.4lf*%.4lf=%.4lf", n1, n2, n1*n2); 
            break;
            case '/':
                if(n2 == 0.0)
                    printf("Wrong!Division by zero!\n");
                else
                    printf("%.4lf/%.4lf=%.4lf", n1, n2, n1/n2); 
            break;
            default:
                printf("Invalid operation!\n");
            break;
        }
    }
    return 0;
}

(入门)BC56-线段图案_牛客题霸_牛客网 (nowcoder.com)

解析:

每次打印一个 * ,按照输入的个数打印后换行就行。

参考代码:

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

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

解析:

每组是由 n *+ 空格组成。

参考代码:

#include <stdio.h>
int main()
{
    int n = 0;
    while(scanf("%d", &n) != EOF)
    {
        int i = 0;
        //确定行数
        for(i=0; i<n; i++)
        {
            int j = 0;
            //每一行的打印,打印n组*+空格
            for(j=0; j<n; j++)
            {
                printf("* ");
            }
            printf("\n");
        }
    }
    return 0;    
}

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

解析:

要计算清楚每一行的输出。

参考代码:

#include<stdio.h>
int main()
{
    int n = 0;
    while(scanf("%d", &n) != EOF)
    {
        int i = 0;
        //控制行数
        for(i=1; i<=n; i++)
        {
            //打印一行
            int j = 0;
            for(j=1; j<=i; j++)
            {
                printf("* ");
            }
            printf("\n");
        }
    }
    return 0;
}

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

解析:

每两个 * 中间有空格,要注意控制好一行输出的内容。

参考代码:

#include <stdio.h>
int main()
{
    int n = 0;
    while(scanf("%d", &n) != EOF)
    {
        int i = 0;
        //行数
        for(i=n; i>=1; i--)
        {
            //打印一行
            int j = 0;
            for(j=i; j>=1; j--)
            {   
                printf("* ");//这里注意空格
            }
            printf("\n");
        }
    }
    return 0;    
}

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

解析:

第二种写法中,在红色三角形范围内的每个坐标上,横纵坐标之和小于n-1

参考代码:

//代码1-常规写法
#include <stdio.h>
int main()
{
    int n = 0;
    while(scanf("%d", &n) != EOF)
    {
        int i = 0;
        //行数控制
        for(i=0; i<n; i++)
        {
            //打印空格
            int j = 0;
            for(j=0; j<n-1-i; j++)
            {
                printf("  ");
            }
            //打印*
            for(j=0; j<=i; j++)
            {
                printf("* ");    
            }
            printf("\n");
        }
        
    }
    return 0;
}
//代码2
#include <stdio.h>
int main()
{
    int n = 0;
    while(scanf("%d", &n) != EOF)
    {
        int i = 0;
        int j = 0;
        //行数
        for(i=0; i<n; i++)
        {
            //一行
            for(j=0; j<n; j++)
            {
                //行和列的和
                //这里可以将行数和列数标出来,利于看明白
                if(i+j<n-1)
                {
                    printf("  ");
                }
                else
                {
                    printf("* ");
                }
            }
            printf("\n");
        }
    }
    return 0;
}

(简单)BC61-金字塔图案_牛客题霸_牛客网 (nowcoder.com)

解析:

每一行的前边是空格,后边是 * + 空格,控制好个数就行。

参考代码:

#include <stdio.h>
int main()
{
    int n = 0;
    while(scanf("%d", &n) != EOF)
    {
        int i = 0;
        for(i=0; i<n; i++)
        {
            //一行
            int j = 0;
            //空格
            for(j=0; j<n-1-i; j++)
            {
                printf(" ");
            }
            //*
            for(j=0; j<=i; j++)
            {
                printf("* ");
            }
            printf("\n");
        }
    }
    return 0;
}


相关文章
|
2天前
|
C语言
【C语言刷题系列】合并两个有序数组
【C语言刷题系列】合并两个有序数组
|
2天前
|
C语言
【C语言刷题系列】删除公共元素
【C语言刷题系列】删除公共元素
|
2天前
|
存储 C语言
【C语言刷题系列】对数字添加逗号
【C语言刷题系列】对数字添加逗号
|
1天前
|
C语言
C语言刷题(函数)
C语言刷题(函数)
|
1天前
|
C语言
C语言刷题(数组)
C语言刷题(数组)
|
2天前
|
存储 C语言
【C语言刷题系列】求一个数组中两个元素a和b的和最接近整数m
【C语言刷题系列】求一个数组中两个元素a和b的和最接近整数m
|
1天前
|
C语言
C语言刷题(循环结构程序设计)
C语言刷题(循环结构程序设计)
|
2天前
|
存储 算法 C语言
【C语言刷题系列】消失的数字
【C语言刷题系列】消失的数字
|
2天前
|
C语言
【C语言刷题系列】轮转数组
【C语言刷题系列】轮转数组
|
2天前
|
C语言
【C语言刷题系列】移除元素
【C语言刷题系列】移除元素