目录

C语言每日一练day_8

C语言每日一练——day_8

引言

针对初学者,每日练习几个题,快速上手C语言。第八天。(连续更新中)

采用在线OJ的形式

什么是在线OJ?

在线判题系统(英语:Online Judge,缩写OJ)是一种在编程竞赛中用来测试参赛程序的在线系统,也可以用于平时的练习。

详细内容可以看一下这篇博客: [关于C/C++语言的初学者在哪刷题,怎么刷题-CSDN博客

https://csdnimg.cn/release/blog_editor_html/release2.3.8/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=P1C7 “关于C/C++语言的初学者在哪刷题,怎么刷题-CSDN博客”) 建议从第一天开始做,前面讲了的知识点后面只是会提一下。有不懂的写再评论区里

1.平均身高

点进去直接做题: [平均身高_牛客题霸_牛客网 (nowcoder.com)

https://csdnimg.cn/release/blog_editor_html/release2.3.8/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=P1C7 “平均身高_牛客题霸_牛客网 (nowcoder.com)”)

参考代码:

#include <stdio.h>
 
//计算平均值
float ave(float arr[])
{
    float sum = 0.0;
    int i = 0;
    while(i < 5)
    {
        sum += arr[i]; //身高相加
        i++;
    }  
    return sum/5.0;
}
 
int main()
{
    float arr[5] = {0};
    int i = 0;
    for(i = 0; i < 5; i++)
    {
        scanf("%f ", &arr[i]);  //输入身高
    }
    float aver = ave(arr);
    printf("%.2f", aver);
    return 0;
}

解析:不想多说什么,不会的就把前几天的题再做一下吧;

2. HTTP状态码

点进去直接做题: [HTTP状态码_牛客题霸_牛客网 (nowcoder.com)

https://csdnimg.cn/release/blog_editor_html/release2.3.8/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=P1C7 “HTTP状态码_牛客题霸_牛客网 (nowcoder.com)”)

参考代码:

#include <stdio.h>
int main()
{
int a;
while(~scanf("%d",&a))
{
    getchar();
    switch(a)
    {
        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");
    }
}
return 0;
}

解析:1. 多组输入

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

3. 数字三角形

点进去直接做题:

[数字三角形_牛客题霸_牛客网 (nowcoder.com)

https://csdnimg.cn/release/blog_editor_html/release2.3.8/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=P1C7 “数字三角形_牛客题霸_牛客网 (nowcoder.com)”) 参考代码:

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

解析:

1. 多组输入

2. 分析清楚每行打印的内容就行了

4. 公务员面试

点进去直接做题:

[公务员面试_牛客题霸_牛客网 (nowcoder.com)

https://csdnimg.cn/release/blog_editor_html/release2.3.8/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=P1C7 “公务员面试_牛客题霸_牛客网 (nowcoder.com)”) 参考代码:

#include <stdio.h>
int main()
{
    int a, max = 0, small = 100, sum = 0, count = 0;
    while (scanf("%d", &a) != EOF)
    {
        if (a > max)//判定最高分
        {
            max = a;
        }
        if (a < small)//判定最低分
        {
            small = a;
        }
        sum += a;
        count++;//计数器
        if (count == 7)//计数器=7时代表一组的分数好了可以进行计算
        {
            printf("%.2f\n", (sum - max - small) / 5.0);
            count = 0;//重置
            max = 0;//重置
            small = 100;//重置
            sum = 0;//重置
        }
         
    }
 
    return 0;
}

解析:

学习这种判断最高分和最低分的技巧

5. 有序序列插入一个数

点进去直接做题: [有序序列插入一个数_牛客题霸_牛客网 (nowcoder.com)

https://csdnimg.cn/release/blog_editor_html/release2.3.8/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=P1C7 “有序序列插入一个数_牛客题霸_牛客网 (nowcoder.com)”) 参考代码:


#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;
}

解析:

1. 多组输入

2. 从往前比较并一定数字找到合适的位置,就可以插入数字了,但是如果插入的数字比所有的元素都 小,那就插入到第一个位置上。

6. 筛选法求素数

点进去直接做题: [筛选法求素数_牛客题霸_牛客网 (nowcoder.com)

https://csdnimg.cn/release/blog_editor_html/release2.3.8/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=P1C7 “筛选法求素数_牛客题霸_牛客网 (nowcoder.com)”) 参考代码:

#include <stdio.h>
 //方法1:筛选法
int main()
 {
     int n = 0;
    while (~scanf("%d", &n))
    {
    int arr[n+1];
    int i = 0;
    //初始化数组的内容为0-n
    for (i = 0; i<=n; i++)
    {
        arr[i] = i;
    }
     for (i = 2; i <= n; i++)
    {
    int j = 0;
    for (j = i + 1; j <= n; j++)
    {
        if (arr[j] % i == 0)
        arr[j] = 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 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++) // for(i = 2; i < i / n; i++) 这样也可以而且优化了时间
        {
        if(is_prime(i)==1)
        {
            printf("%d ", i);
        }
        else
        {
            count++;
        }
        }
        printf("\n%d\n", count);
    }
    return 0;
}

解析:

学习怎么判断一个数是不是素数

7. 图像相似度

点进去直接做题: [图像相似度_牛客题霸_牛客网 (nowcoder.com)

https://csdnimg.cn/release/blog_editor_html/release2.3.8/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=P1C7 “图像相似度_牛客题霸_牛客网 (nowcoder.com)”)

参考代码:

#include <stdio.h>
 
int main()
{
    int m = 0; //表示行数
    int n = 0; //表示列数
    int arr1[100][100] = { 0 };
    int arr2[100][100] = { 0 };
    //输入
    scanf("%d %d", &m, &n);
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            scanf("%d ", &arr1[i][j]);
        }
    }
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            scanf("%d ", &arr2[i][j]);
        }
    }
    int cnt = 0; //表示相同的个数
    //比较
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            if (arr1[i][j] == arr2[i][j])
            {
                cnt++;
            }
        }
    }
    //输出
    printf("%.2f\n", 100.0 * cnt / (m * n));
 
    return 0;
}

解析:

1. 输入二维数组

2. 求两个二维素组的相同元素个数

3. 求百分比要注意*100.0,小时点后保留2位

8. 登录验证

点进去直接做题: [登录验证_牛客题霸_牛客网 (nowcoder.com)

https://csdnimg.cn/release/blog_editor_html/release2.3.8/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=P1C7 “登录验证_牛客题霸_牛客网 (nowcoder.com)”) 参考代码:

#include<stdio.h>

int main()
{
    char name[20] = {0};
    char passage[20] = {0};
    while(scanf("%s %s", name, passage) != EOF)
    {
        if (strcmp(name, "admin") == 0 && strcmp(passage, "admin") == 0)
        {
            printf("Login Success!");
        }
        else
        {
            printf("Login Fail!");
        }
    }
    return 0;
}

解析:

1. 多组输入

2. 两个字符串比较大小不能使用 ==,得使用strcmp函数,比较的是两个字符串中对应字符的ASCII码 值。

3.当strcmp函数返回值   等于0时,表示两个字符串相等。

9.包含数字9的数

点进去直接做题:

[包含数字9的数_牛客题霸_牛客网 (nowcoder.com)

https://csdnimg.cn/release/blog_editor_html/release2.3.8/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=P1C7 “包含数字9的数_牛客题霸_牛客网 (nowcoder.com)”) 参考代码:

#include <stdio.h>
 
int main()
{
    int cnt = 0;
    for (int i = 1; i <= 2019; i++)
    {
        int m = i;
        while (m > 0)
        {
            if (m % 10 == 9)
            {
                cnt++;
                break;
            }
            else
            {
                m /= 10;
            }
        }
    }
    //输出
    printf("%d\n", cnt);
 
    return 0;
}

解析:

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

10. 奇偶统计

点进去直接做题: [奇偶统计_牛客题霸_牛客网 (nowcoder.com)

https://csdnimg.cn/release/blog_editor_html/release2.3.8/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=P1C7 “奇偶统计_牛客题霸_牛客网 (nowcoder.com)”) 参考代码:

//代码1
 #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;
 }
 //代码2
 #include <stdio.h>
 int main()
 {
     int n = 0;
     scanf("%d", &n);
     int i = 0;
     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;
 }

解析: 1. 代码1就是统计技术的个数,算出偶数的个数。

2. 代码2是根据数字的个数推算。