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

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

针对C语言入门OJ题(牛客网)https://www.nowcoder.com/

(简单)BC23-时间转换_牛客题霸_牛客网 (nowcoder.com)

解析:

计算好对应的数字,按照格式打印就行。

参考代码:

#include <stdio.h>
int main()
{
    //输入
    int sec = 0;    
    int h = 0;//小时
    int m = 0;//分钟
    int s = 0;//秒
    scanf("%d", &sec);
    //计算
    h = sec/60/60;
    m = sec/60%60;
    s = sec%60;
    //输出
    printf("%d %d %d\n", h,m,s);
 
    return 0;
}

(入门)BC24-总成绩和平均分计算_牛客题霸_牛客网 (nowcoder.com)

解析:

  1. 本题在接收数据的同时就可以计算分数的总和,不一定非要等数据全部接收完毕。
  2. 按照格式打印就行。

参考代码:

//代码一
#include <stdio.h>
int main()
{
    double score[3] = {0};//三科的成绩
    //输入
    scanf("%lf %lf %lf", &score[0], &score[1], &score[2]);
    //计算
    double sum = score[0] + score[1] + score[2];
    double avg = sum/3.0;
    //输出
    printf("%.2lf %.2lf\n", sum, avg);
 
    return 0;
}
//代码二
#include <stdio.h>
int main()
{
    int i = 0;
    double sum = 0.0;
    double score = 0.0;
    //输入并计算
    for(i=0; i<3; i++)
   {
        scanf("%lf", &score);
        sum += score;
   }
    printf("%.2lf %.2lf\n", sum, sum/3.0);
 
    return 0;
}

(简单)BC30-KiKi和酸奶_牛客题霸_牛客网 (nowcoder.com)

解析:

  1. 注意多组输入。
  2. 如果 h 分钟喝一瓶酸奶,那么 m 分钟喝汽水的瓶数就是 h/m 瓶,但是如果 m%h 有余数,就说明又打开了一瓶,只是没来得及喝完,那么未打开的就少一瓶。

参考代码:

#include <stdio.h>
int main()
{
    int n = 0;//给的酸奶瓶数
    int h = 0;//喝一瓶酸奶所用时间
    int m = 0;//总共时间
    while(scanf("%d %d %d", &n, &h, &m) != EOF)
   {
        if(m%h>0)
            printf("%d\n", n-m/h-1);
        else
            printf("%d\n", n-m/h);
   }
    
    return 0;
}

(入门)BC31-发布信息_牛客题霸_牛客网 (nowcoder.com)

解析:

直接按照要求输出结果。

参考代码:

#include <stdio.h>
int main()
{
    printf("I lost my cellphone!\n");
    return 0;
}

(入门)BC32-输出学生信息_牛客题霸_牛客网 (nowcoder.com)

解析:

按照题目要求的格式输出即可。

参考代码:

#include <stdio.h>
int main()
{
    printf("Name   Age   Gender\n");
    printf("---------------------\n");
    printf("Jack   18    man\n");
    return 0;
}

(入门)BC33-计算平均成绩_牛客题霸_牛客网 (nowcoder.com)

解析:

在获取输入数据的同时,计算成绩总和,然后求出平均值,按照格式输出就行。

参考代码:

//代码一
#include <stdio.h>
int main()
{
    //输入
    int i = 0;
    int sum = 0;
    int input = 0;
    for(i=0; i<5; i++)
   {
        scanf("%d", &input);
        sum += input;
   }
    //输出
    printf("%.1lf\n", sum/5.0);
    return 0;
}
//代码二
#include <stdio.h>
int main()
{
    int num[5] = {0};
    //输入
    int i = 0;
    for(i=0; i<5; i++)
   {
        scanf("%d", &num[i]);
   }
    //求和
    int sum = 0;
    for(i=0; i<5; i++)
    {
        sum += num[i];
    }
    //输出
    printf("%.1lf\n", sum/5.0);
 
    return 0;
}

(简单)BC34-进制A+B_牛客题霸_牛客网 (nowcoder.com)

解析:

  1. 首先要理解十进制、十六进制、八进制只是一种数据的表示形式,不是数据的存储形式。
  2. 不同格式的数据的输出在C语言中有不同的格式指定,比如:%x 是十六进制格式,%o 就是八进制格式。
  3. 不同进制的数据存放在整形变量中都是整形值,直接计算就行,计算交给计算机。

参考代码:

int main()
{
    int a = 0;
    int b = 0;
    scanf("%x %o", &a, &b);
    int sum = a+b;
    printf("%d\n", sum);
    return 0;
}  

(简单)BC37-网购_牛客题霸_牛客网 (nowcoder.com)

解析:

  1. 理解清楚题目的意思,然后进行计算即可。
  2. 注意抵扣完后价格小于0的,只能按照0计算。
  3. 要求按照格式输出。

参考代码:

//代码1
#include <stdio.h>
int main()
{
    double price = 0.0;//价格
    int month = 0;
    int day = 0;
    int flag = 0;//是否有优惠券
    double cut = 0;//折扣
    //输入
    scanf("%lf %d %d %d", &price, &month, &day, &flag);
    if(month == 11 && day == 11)
   {
        price *= 0.7;
        if(flag == 1)
            price -= 50;
   }
    else if(month == 12 && day == 12)
   {
        price *= 0.8;
        if(flag == 1)
            price -= 50;
   }
    if(price < 0.0)
        printf("%.2lf\n", 0.0);
    else
        printf("%.2lf\n", price);
    return 0;
}
//代码2
#include <stdio.h>
int main()
{
    double price = 0.0;//价格
    int month = 0;
    int day = 0;
    int flag = 0;//是否有优惠券
    double cut = 0;//折扣
    double last = 0.0;//最后的价格
    //输入
    scanf("%lf %d %d %d", &price, &m, &d, &flag);
    if(month == 11 && day == 11)
   {
        cut = 0.7;
   }
    else if(month==12 && day == 12)
   {
        cut = 0.8;
   }
    last = price*cut-flag*50.0;
    if(last < 0.0)
        printf("%.2lf\n", 0.0);
    else
        printf("%.2lf\n", last);
    return 0;
}

(简单)BC39-争夺前五名_牛客题霸_牛客网 (nowcoder.com)

解析:

  1. 学会使用C语言库函数提供qsort函数。
  2. 学会自己实现一个简单的整形数组排序代码。

参考代码:

//代码1
#include <stdio.h>
#include <stdlib.h>
int cmp_int(const void* e1, const void*e2)
{
    return *(int*)e1 - *(int*)e2;
}
int main()
{
    //输入
    int n = 0;//个数
    int score[40] = {0};//存放的是成绩
    scanf("%d", &n);
    int i = 0;
    for(i=0; i<n; i++)
   {
        scanf("%d", &score[i]);
   }
    //对所有数字排序
    //使用库函数排序
    qsort(score, n, 4, cmp_int);
     for(i=0; i<5; i++)
   {
        printf("%d ", score[--n]);
   }
    return 0;
}
//代码2
#include <stdio.h>
#include <stdlib.h>
int cmp_int(const void* e1, const void*e2)
{
    return *(int*)e1 - *(int*)e2;
}
int main()
{
    //输入
    int n = 0;//个数
    int score[40] = {0};//存放的是成绩
    scanf("%d", &n);
    int i = 0;
    for(i=0; i<n; i++)
   {
        scanf("%d", &score[i]);
   }
    //排序 - 升序 - 后5个元素 - 就是最高的前5个成绩
    //使用库函数排序
    qsort(score, n, 4, cmp_int);
     for(i=n-1; i>n-5; i--)
   {
        printf("%d ", score[i]);
   }
    return 0;
}
//代码3
#include <stdio.h>
int main()
{
    //输入
    int n = 0;//个数
    int score[40] = {0};//存放的是成绩
    scanf("%d", &n);
    int i = 0;
    for(i=0; i<n; i++)
   {
        scanf("%d", &score[i]);
   }
    //对所有数字排序-冒泡排序
    int j = 0;
    for(i=0; i<n; i++)//趟数
   {
        //一趟冒泡排序要进行多少对元素的比较
        for(j=0; j<n-i-1; j++)
       {
            if(score[j] < score[j+1])//降序(由大到小)
           {
                int tmp = score[j];
                score[j] = score[j+1];
                score[j+1] = tmp;
           }
       }
   }
    
    for(i=0; i<5; i++)
   {
        printf("%d ", score[i]);
   }
    
    return 0;
}
//代码4
#include <stdio.h>
int main()
{
    //输入
    int n = 0;//个数
    int score[40] = {0};//存放的是成绩
    scanf("%d", &n);
    int i = 0;
    for(i=0; i<n; i++)
   {
        scanf("%d", &score[i]);
   }
    //排序 - 升序 - 后5个元素 - 就是最高的前5个成绩
    //对所有数字排序-冒泡排序
    for(i=0; i<n-1; i++)//趟数
   {
        //一趟冒泡排序要进行多少对元素的比较
        int j = 0;
        for(j=0; j<n-i-1; j++)
       {
            if(score[j] > score[j+1])
           {
                int tmp = score[j];
                score[j] = score[j+1];
                score[j+1] = tmp;
           }
       }
   }
    
    for(i=n-1; i>=n-5; i--)
   {
        printf("%d ", score[i]);
   }
    
    return 0;
}

(简单)BC40-竞选社长_牛客题霸_牛客网 (nowcoder.com)

解析:

  1. 这道题有多种解法。
  2. 主要就是读取输入数据的问题要解决好,输入有2个结束条件(遇到读取结束EOF,或者'0')。
  3. 剩余的工作就是统计个数后,然后根据情况按照格式进行输出。

参考代码:

​//代码1
#include <stdio.h>
int main()
{
    char arr[100] = {0};
    //输入
    gets(arr);
    //统计
    int i = 0;
    int count_a = 0;
    int count_b = 0;
    while(arr[i] != '0')
   {
        if(arr[i] == 'A')
       {
            count_a ++;
       }
        else if(arr[i] == 'B')
       {
            count_b ++;
       }
        i++;
   }
    if(count_a > count_b)
        printf("A");
    else if(count_a < count_b)
        printf("B");
    else
        printf("E");
    return 0;
}
//代码2
#include <stdio.h>
int main()
{
    char arr[100] = {0};
    //输入
    gets(arr);
    //统计
    int i = 0;
    int flag = 0;
    while(arr[i] != '0')
   {
        if(arr[i] == 'A')
       {
            flag++;
       }
        else if(arr[i] == 'B')
       {
            flag--;
       }
        i++;
   }
    //输出
    if(flag>0)
        printf("A");
    else if(flag<0)
        printf("B");
    else
        printf("E");
    return 0;
}
//代码3
#include <stdio.h>
int main()
{
    //输入并统计
    char arr[100] = {0};
    int ch = 0;
    int flag = 0;
    //如果getchar获取了
    while(((ch=getchar()) != '0') && ch != EOF)
   {
        if(ch == 'A')
       {
            flag++;
       }
        else if(ch == 'B')
       {
            flag--;
       }
   }
    if(flag>0)
        printf("A");
    else if(flag<0)
        printf("B");
    else
        printf("E");
    return 0;
}


相关文章
|
4月前
|
存储 C语言
【C语言】基础刷题训练4(含全面分析和代码改进示例)
【C语言】基础刷题训练4(含全面分析和代码改进示例)
|
2月前
|
机器学习/深度学习 编译器 C语言
C语言刷题(中)(保姆式详解)
C语言刷题(中)(保姆式详解)
19 0
|
4月前
|
C语言
【C语言刷题训练】——第7节(含代码与分析思路)
【C语言刷题训练】——第7节(含代码与分析思路)
|
4月前
|
测试技术 C语言 C++
【C语言刷题训练——6】鹏哥C语言刷题训练营笔记,含代码讲解改进
【C语言刷题训练——6】鹏哥C语言刷题训练营笔记,含代码讲解改进
|
4月前
|
存储 C语言
【C语言】鹏哥C语言刷题训练营——第5节内容笔记(含代码全面分析和改进,讲解)
【C语言】鹏哥C语言刷题训练营——第5节内容笔记(含代码全面分析和改进,讲解)
|
6月前
|
C语言
C语言刷题(函数)
C语言刷题(函数)
|
6月前
|
C语言
C语言刷题(数组)
C语言刷题(数组)
|
6月前
|
存储 C语言
【C语言刷题系列】求一个数组中两个元素a和b的和最接近整数m
【C语言刷题系列】求一个数组中两个元素a和b的和最接近整数m
|
6月前
|
C语言
C语言刷题(循环结构程序设计)
C语言刷题(循环结构程序设计)
|
25天前
|
存储 C语言 开发者
【C语言】字符串操作函数详解
这些字符串操作函数在C语言中提供了强大的功能,帮助开发者有效地处理字符串数据。通过对每个函数的详细讲解、示例代码和表格说明,可以更好地理解如何使用这些函数进行各种字符串操作。如果在实际编程中遇到特定的字符串处理需求,可以参考这些函数和示例,灵活运用。
49 10