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

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

针对C语言入门OJ题

(入门)BC72-平均身高_牛客题霸_牛客网 (nowcoder.com)

参考代码:

//代码一
#include <stdio.h>
int main()
{
    int i = 0;
    float hi = 0.0;
    float sum = 0.0;
    for(i=0; i<5; i++)
    {
        scanf("%f", &hi);
        sum += hi;
    }
    printf("%.2f\n", sum/5.0);
 
    return 0;
}
//代码二
#include <stdio.h>
int main()
{
    int i = 0;
    float hi[5] = {0};
    float sum = 0.0;
    for(i=0; i<5; i++)
    {
        scanf("%f", &hi[i]);
    }
    for(i=0; i<5; i++)
    {
        sum += hi[i];
    }
    printf("%.2f\n", sum/5.0);
 
    return 0;
}

(简单)BC74-HTTP状态码_牛客题霸_牛客网 (nowcoder.com)

解析:

状态码比较多,且为整数,所以可以考虑用 switch 语句。

参考代码:

#include <stdio.h>
int main()
{
    int state = 0;
    while(scanf("%d", &state) != EOF)
    {
        switch(state)
        {
            case 200:
                printf("OK\n");
                break;
            case 202:
                printf("Accepted\n");
                break;
            case 400:
                printf("Bad Request\n");
                break;
             case 403:
                printf("Forbidden\n");
                break;
            case 404:
                printf("Not Found\n");
                break;
            case 500:
                printf("Internal Server Error\n");
                break;
            case 502:
                printf("Bad Gateway\n");
                break;
        }
    }
    return 0;
}

(简单)BC75-数字三角形_牛客题霸_牛客网 (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("%d ", j);
            }
            printf("\n");
        }
    }
    return 0;
}

(简单)BC76-公务员面试_牛客题霸_牛客网 (nowcoder.com)

解析:

一边输入,一边求和,一边求最大值和最小值,最后算平均值。

参考代码:

#include <stdio.h>
int main()
{
    int i = 0;
    int sum = 0;
    int min = 100;//假设最小值是100
    int max = 0;//假设最大值是0
    int score = 0;
    for(i=0; i<7; i++)
    {
        scanf("%d ", &score);//输入成绩
        sum += score;//成绩求和
        if(score > max)
            max = score;//求最大值
        if(score < min)
            min = score;//求最小值
    }
    printf("%.2f\n", (sum-min-max)/5.0);//输出去掉最高分和最低分的平均成绩,并换行
    return 0;
}

(简单)BC77-有序序列插入一个数_牛客题霸_牛客网 (nowcoder.com)

解析:

从后往前比较数字找到合适的位置就可以插入数字了,但是如果插入的数字比所有的元素都

小,那就插入到第一个位置上(特殊情况)。(做类似题目需要考虑多种情况-边界值)

参考代码:

//代码一
#include <stdio.h>
int main()
{
    int n = 0;
    int arr[51] = {0};//0~51
    int m = 0;//要插入的数据
    scanf("%d", &n);//输入数据
    int i = 0;
    for(i=0; i<n; i++)
    {
        scanf("%d", &arr[i]);
    }
    scanf("%d", &m);//输入要插入的数据
    //插入数据的处理
    for(i=n-1; i>=0 ; i--)
    {
        if(arr[i]> m)
        {
            arr[i+1] = arr[i];
        }
        else
        {
            arr[i+1] = m;
            break;
        }
    }
    //如果插入数字小于所有的数字
    if(i < 0)
    {
        arr[0] = m;
    }
    //打印
    for(i=0; i<n+1; i++)
    {
        printf("%d ", arr[i]);
    }
 
    return 0;
}
//代码二
#include <stdio.h>
int main()
{
    int n = 0;
    int arr[50] = {0};
    int m = 0;//要插入的数据
    //输入数据
    scanf("%d", &n);
    int i = 0;
    for(i=0; i<n; i++)
    {
        scanf("%d", &arr[i]);
    }
    scanf("%d", &m);
    //处理
    for(i=n; i>0 ; i--)
    {
        if(arr[i-1]> m)
        {
            arr[i] = arr[i-1];
        }
        else
        {
            arr[i] = m;
            break;
        }
    }
    //如果插入数字小于所有的数字
    if(i == 0)
    {
        arr[i] = m;
    }
    //打印
    for(i=0; i<n+1; i++)
    {
        printf("%d ", arr[i]);
    }
    return 0;
}

(简单)BC78-筛选法求素数_牛客题霸_牛客网 (nowcoder.com)

参考代码:

//代码一(与代码二无差)
#include <stdio.h>
//方法1:筛选法
int main()
{
     int n = 0;
     while (~scanf("%d", &n))
     {
         //int arr[n+1];//变长数组
         //初始化数组的内容为0-n
         int arr[101];//将数字与数组下标相对应
         int i = 0;
         //存储数据               
         for (i = 2; i<=n; i++)
         {
            arr[i] = i;
         }
         //列举所有的除数
         int j = 0;
         for (j = 2; j <= n; i++)
         {
             int k = 0;
             for (k = j + 1; k <= n; k++)
             {
                 if (arr[k] % j == 0)
                 arr[k] = 0;
             }
         }
         //输出并记录
         int count = 0;
         for (i = 2; i <= n; i++)
         {
             if (arr[i] != 0)
                 printf("%d ", arr[i]);
             else
                 count++;
         }
         printf("\n%d\n", count);
     }
     return 0;
}
//代码二和代码三不是题目要求的筛选法(在这里不建议用使用)
//代码二(与代码三无差)
//方法2:试除法
int main()
{
    int n = 0;
    //题目相当于打印n以内的素数
    while(scanf("%d", &n) != EOF)
    {
        int i = 0;
        int count = 0;
        for(i=2; i<=n; i++)
        {
            //判断i是否为素数
            //2->i-1之间的数字
            int j = 0;
            for(j=2; j<i; j++)
            {
                if(i%j == 0)
                {
                    count++;
                    break;
                }
            }
            if(j == i)
                printf("%d ", j);               
        }
         printf("\n%d\n", count);
    }
    return 0;
}
//代码三
//方法2:试除法
int is_prime(int n)
{
    int i = 0;
    for(i=2; i<n; i++)
    {
        if(n%i == 0)
            return 0;
    }
    return 1;
}
int main()
{
    int n = 0;
    //题目相当于打印n以内的素数
    while(scanf("%d", &n) != EOF)
    {
        int i = 0;
        int count = 0;
        for(i=2; i<=n; i++)
        {
            if(is_prime(i)==1)
            {
                printf("%d ", i);
            }
            else
            {
                count++;
            }
        }
        printf("\n%d\n", count);
    }
    return 0;
}

(简单)BC79-图像相似度_牛客题霸_牛客网 (nowcoder.com)

解析:

  1. 求两个二维数组的相同元素个数。
  2. 求百分比要注意 *100.0,小数点后保留2位。

参考代码:

#include <stdio.h>
int main()
{
    int m = 0;
    int n = 0;
    int a[100][100] = {0},b[100][100] = {0};
    scanf("%d%d", &m, &n);
    int i  = 0;
    int j = 0;
    int count = 0.0;
    //输入数据
    for(i=0; i<m; i++)
    {
        for(j=0; j<n; j++)
        {
            scanf("%d", &a[i][j]);
        }
    }
    for(i=0; i<m; i++)
    {
        for(j=0; j<n; j++)
        {
            scanf("%d", &b[i][j]);
        }
    }
    //求相同元素的个数
    for(i=0; i<m; i++)
    {
        for(j=0; j<n; j++)
        {
            if(a[i][j] == b[i][j])
            {
                count++;
            }
        }
    }    
    printf("%.2f\n", 100.0*count/(m*n));//求相似度注意乘以100
    return 0;
}

(简单)BC80-登录验证_牛客题霸_牛客网 (nowcoder.com)

解析:

两个字符串比较大小不能使用 == ,得使用 strcmp 函数(需要引用#include <string.h>头文件),比较的是两个字符串中对应字符的 ASCII 码值。

参考代码:

#include <stdio.h>
#include <string.h>
int main()
{
    char name[100] = {0};
    char password[100] = {0};
 
    while(scanf("%s %s", name, password) != EOF)
    {
        //两个字符串比较相等
        if(strcmp(name, "admin")==0 && strcmp(password, "admin")==0)
        {
            printf("Login Success!\n");
        }
        else
        {
            printf("Login Fail!\n");
        }
    }
    return 0;
}

(简单)BC85-包含数字9的数_牛客题霸_牛客网 (nowcoder.com)

解析:

要判断一个数字是否包含 9, 看这个数字的某一位是否为 9 即可,只要某一位为 9 就停下来。

参考代码:

#include <stdio.h>
int main()
{
    int i = 0;
    int count = 0;
    for(i=1; i<=2019; i++)
    {
        //判断i是否包含9
        int t = i;
        while(t)
        {
            if(t%10 == 9)
            {
                count++;
                break;
            }
            t = t/10;
            //t /= 10;
        }
    }
    printf("%d\n", count);
    
    return 0;
}

(入门)BC86-奇偶统计_牛客题霸_牛客网 (nowcoder.com)

解析:

  1. 代码一就是统计奇数的个数,再算出偶数的个数。
  2. 代码二是根据数字的个数推算的。
  3. 代码三与代码二无差

参考代码:

//代码一
#include <stdio.h>
int main()
{
    int n = 0;
    scanf("%d", &n);
    int i = 0;
    int odd = 0;//奇数
    int even = 0;//偶数
    for(i=1; i<=n; i++)
    {
        if(i%2==1)
            odd++;
    }
    printf("%d %d\n", odd, n-odd);
    return 0;
}
 
//代码二
#include <stdio.h>
int main()
{
    int n = 0;
    scanf("%d", &n);
    int odd = 0;//奇数
    if(n%2==0)
        odd = n/2;//如果n是偶数,则奇数和偶数一样多
    else
        odd = n/2+1;//如果n是奇数,则奇数比偶数多1
    printf("%d %d\n", odd, n-odd);
    return 0;
}
//代数三
#include <stdio.h>
int main()
{
    int n = 0;
    scanf("%d", &n);
    if(n%2==1)
        printf("%d %d\n", n/2+1, n/2);
    else
        printf("%d %d\n", n/2, n/2);
 
    return 0;
}

1


相关文章
|
3月前
|
存储 C语言
【C语言】基础刷题训练4(含全面分析和代码改进示例)
【C语言】基础刷题训练4(含全面分析和代码改进示例)
|
30天前
|
机器学习/深度学习 编译器 C语言
C语言刷题(中)(保姆式详解)
C语言刷题(中)(保姆式详解)
12 0
|
3月前
|
C语言
【C语言刷题训练】——第7节(含代码与分析思路)
【C语言刷题训练】——第7节(含代码与分析思路)
|
3月前
|
测试技术 C语言 C++
【C语言刷题训练——6】鹏哥C语言刷题训练营笔记,含代码讲解改进
【C语言刷题训练——6】鹏哥C语言刷题训练营笔记,含代码讲解改进
|
3月前
|
存储 C语言
【C语言】鹏哥C语言刷题训练营——第5节内容笔记(含代码全面分析和改进,讲解)
【C语言】鹏哥C语言刷题训练营——第5节内容笔记(含代码全面分析和改进,讲解)
|
5月前
|
C语言
C语言刷题(函数)
C语言刷题(函数)
|
5月前
|
C语言
C语言刷题(数组)
C语言刷题(数组)
|
5月前
|
存储 C语言
【C语言刷题系列】求一个数组中两个元素a和b的和最接近整数m
【C语言刷题系列】求一个数组中两个元素a和b的和最接近整数m
|
5月前
|
C语言
C语言刷题(循环结构程序设计)
C语言刷题(循环结构程序设计)
|
29天前
|
C语言 C++
C语言 之 内存函数
C语言 之 内存函数
32 3