当前位置: 首页 > article >正文

C语言每日一练——day_9

引言

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

        采用在线OJ的形式

什么是在线OJ?

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

        详细内容可以看一下这篇博客:关于C/C++语言的初学者在哪刷题,怎么刷题-CSDN博客https://blog.csdn.net/2401_88433210/article/details/146056171?spm=1011.2415.3001.10575&sharefrom=mp_manage_link

 建议从第一天开始做,前面讲了的知识点后面只是会提一下。有不懂的写再评论区里 

1.统计成绩 

        点进去直接做题:统计成绩_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/cad8d946adf64ab3b17a555d68dc0bba?tpId=107&&tqId=33368&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking参考代码:

#include <stdio.h>
int main()
{
    double n;
    scanf("%lf",&n);
    double maxx=0,minn=1e9,average=0,sum=0;//根据题目给的范围给定一个较大的min值
    for(int i=0;i<n;++i)
    {
        double x;
        scanf("%lf",&x);//每输入一次就进行一次判断和加和
        if(x>maxx)maxx=x;
        if(x<minn)minn=x;
        sum+=x;
    }
    average=sum/n;
    printf("%.2f %.2f %.2f",maxx,minn,average);
    return 0;
}

解析:输入的同时就最大值最小值和求和,然后计算想要的结果。

2.密码验证

        点进去直接做题:密码验证_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/895b3b552d80485cb5e426a0ebf9a251?tpId=107&&tqId=33370&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking参考代码:

#include <stdio.h>
 #include <string.h>
 int main()
 {
    char s1[100] = {0};
    char s2[100] = {0};
    scanf("%s %s", s1, s2);
 if(strcmp(s1, s2) == 0)
    printf("same\n");
 else
    printf("different\n");
 return 0;
 }

解析:密码是字符串,字符串的比较函数使用strcmp函数。

3.矩阵计算

        点进去直接做题:矩阵计算_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/0c83231923c541d2aa15861571831ee5?tpId=107&&tqId=33371&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking参考代码:

代码一:
#include<stdio.h>
int main()
{
    int n,m,i,j;
    int sum=0;
    int a[10][10]={0};
    scanf("%d %d",&n,&m);
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
        {
            scanf("%d ",&a[i][j]);
            if(a[i][j]>=0)
                sum+=a[i][j];
                 
        }
    }
    printf("%d\n",sum);
}
代码二:
#include <stdio.h>
 int main()
 {
 int m = 0;
 int n = 0;
 scanf("%d %d", &m,&n);
 int i = 0;
 int j = 0;
 int tmp = 0;
 int sum = 0;
 for(i=0; i<n; i++)
    {

        for(j=0; j<m; j++)
        {
            scanf("%d", &tmp);
         if(tmp > 0)
            sum += tmp;
        }
    }
 printf("%d", sum);
 return 0;
 }

解析: 在输入的同时,将大于0的数求和。

4.逆序输出

        点进去直接做题:逆序输出_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/bb66c27cb7aa48f9ba7d9f88e4068285?tpId=107&&tqId=33373&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking参考代码:

#include <stdio.h>

int main() 
{
    int a[20];
    
    for(int i = 9; i >= 0; i--)
    {
        scanf("%d ",&a[i]);
    }

    for(int i = 0; i < 10; i++)
    {
        printf("%d ",a[i]);
    }
 
    return 0;
}

 解析:很简单,不想多说什么。

5.统计数据正负个数

        点进去直接做题:统计数据正负个数_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/3f33889582934a09b4e3ddd3cc976226?tpId=107&&tqId=33374&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking参考代码:

#include <stdio.h>
 int main()
 {
 int i = 0;
 int positive = 0;
 int negative = 0;
 int tmp = 0;
 for(i=0; i<10; i++)
    {
 scanf("%d", &tmp);
 if(tmp>=0)
    positive++;
 else
    negative++;
    }
 printf("positive:%d\n", positive);
 printf("negative:%d\n", negative);
 return 0;
 }

解析:不想说什么,太简单了,有手就行。

6.N个数之和

        点进去直接做题:N个数之和_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/b007744eb43b4f7b95d9e87de01528db?tpId=107&&tqId=33375&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking参考代码:

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

解析:不想说什么,太简单了,有手就行,不会的回家的。

7.最高分与最低分之差

        点进去直接做题:最高分与最低分之差_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/e0e4f81dcd55408a8973f8033bbeb1d2?tpId=107&&tqId=33376&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking参考代码:

int main()
{
    int n = 0;
    int m = 0;
    int max = 0;
    int min = 100;
    scanf("%d",&n);
 
    for(int i = 0;i<n;i++)
    {
        scanf("%d", &m);
        if(m>max)
        {
            max = m;
        }
        if(m<min)
        {
            min = m;
        }
 
    }
 
    printf("%d",max-min);
    return 0;
}

解析:学以致用,用前面学过的一个得最大值最小值的技巧。

8.有序序列判断

        点进去直接做题:有序序列判断_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/22e87f8a8d764a6582710f38d1b40c6e?tpId=107&&tqId=33377&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking参考代码:

#include <stdio.h>
 int main()
 {
    int n = 0;
    int arr[50] = {0};
     scanf("%d", &n);
    int i = 0;
    int flag1 = 0;
    int flag2 = 0;
    for(i=0; i<n; i++)
    {
        scanf("%d", &arr[i]);
        if(i>0)
        {
            if(arr[i]>arr[i-1])
             flag1 = 1;
            else if(arr[i]<arr[i-1])
            flag2 = 1;
        }
    }
 //flag1 和 flag2 都为1是乱序的
    if(flag1+flag2 > 1)
    printf("unsorted\n");
    else
     printf("sorted\n");
 return 0;
}

解析:

        题目中设置2个标记变量,flag1,flag2,满足相邻2个元素升序把flag1设置为1,满足相邻2个元 素降序把flag2设置为1.如果flag1和flag2都是1,那就是乱序。 (很巧妙的技巧)

        编程就是要有创新精神。

9.序列中删除指定数字

        点进去直接做题:序列中删除指定数字_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/7bbcdd2177a445a9b66da79512b32dd7?tpId=107&&tqId=33379&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking参考代码:

#include <stdio.h>
 int main()
 {
 int n = 0;
 int arr[50] = {0};
 int m = 0;
 //输入数据
scanf("%d", &n);
 int i = 0;
 int j = 0;
 for(i=0; i<n; i++)
    {
        scanf("%d", &arr[i]);
    }
    scanf("%d", &m);
    for(i=0; i<n; i++)
    {
        if(arr[i] != m)
        {
            arr[j++] = arr[i];
        }
    }
        for(i=0; i<j; i++)
        {
            printf("%d ", arr[i]);
        }
 return 0;
 }

解析:把代码模拟一遍就可以看懂了

        要考虑删除多个相同的数字。

10.序列中整数去重        

        点进去直接做题:序列中整数去重_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/6564a2f6e70f4153ad1ffd58b2b28490?tpId=107&&tqId=33380&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking参考代码:

#include <stdio.h>
 int main()
 {
    int n = 0;
    int arr[5000] = {0};
    //输入数据
    scanf("%d", &n);
     int i = 0;
    for(i=0; i<n; i++)
    {
    scanf("%d", &arr[i]);
    }
    //去重
    for(i=0; i<n; i++)
    {
        int j = 0;
        for(j=i+1; j<n; j++)
        {
         //先找出相同的元素
        //如果相等,要把后续元素往前移动
        if(arr[i] == arr[j])
        {
            int k = 0;
                for(k=j; k<n-1; k++)
                {
                arr[k] = arr[k+1];
                }
                 n--;//去重一个,个数少1
                j--;
            //如果去重了arr[j]
            //把下一个位置的数字arr[j+1],放在新的arr[j]上
            //恰好又和arr[i]相同,所以也要再判断
            //3 2 3 3 3 4 5
        }
        }
    }
 for(i=0;i<n; i++)
    {
 printf("%d ", arr[i]);
    }
 return 0;
 }

解析:看着代码多思考,多想。

11.有序序列合并

        点进去直接做题:有序序列合并_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/a9e943b0dab142759807d0cfb6863897?tpId=107&&tqId=33381&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking参考代码:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
代码一:
int main() {
    int a, b;
    int arr1[1010], arr2[1010], arr3[2020];

    scanf("%d %d",&a,&b);
    for(int i = 0; i < a; i++) scanf("%d ",&arr1[i]);     
    for(int i = 0; i < b; i++) scanf("%d ",&arr2[i]);  

    int t1 = 0, t2 = 0, t = 0;

    while(t1 < a && t2 < b)
    {
    if(arr1[t1] > arr2[t2]) 
    {
        arr3[t++] = arr2[t2++];
    }else
    {
        arr3[t++] = arr1[t1++];
    }
    }

    while(t1 < a) arr3[t++] = arr1[t1++];
    while(t2 < b) arr3[t++] = arr2[t2++];
    for(int i = 0; i < a + b; i++)
    {
    printf("%d ",arr3[i]);
    }
    return 0;
}

代码二:
#include<stdio.h>
int n, m; int a[2020], b[1010];
int main()
{
    scanf("%d %d", &n, &m);
    int t = n + m, t1 = n, t2 = m;
    for (int i = 1; i <= n; i++) scanf("%d ", &a[i]);
    for (int i = 1; i <= m; i++) scanf("%d ", &b[i]);

    while ( t1 >= 1 && t2 >= 1)
    {
        if (a[t1] > b[t2]) a[t--] = a[t1--];
        else a[t--] = b[t2--];
    }
    while (t2 >= 1) a[t--] = b[t2--];

    for (int i = 1; i <= n + m; i++) printf("%d ", a[i]);


    return 0;
}

解析:        

        代码一:通过一个辅助数组来存数据,最后使两个数组和并成一个数组使其有序。

        代码二:在一个数组上做处理,很巧妙,多看代码多悟。

做题时,一定要在脑子中有画面,多想象。


http://www.kler.cn/a/588280.html

相关文章:

  • AI绘画笔记--基础知识
  • Tomcat - Session 会话保持
  • 大模型的参数数量与学习的知识数量之间
  • CSS -position(定位)
  • 81.HarmonyOS NEXT 状态管理与响应式编程:@Observed深度解析
  • Redisson 实现分布式锁源码浅析
  • 【leetcode hot 100 230】二叉搜索树中第K小的元素
  • 【BERT和GPT的区别】
  • 向量数据库技术系列一-基本原理
  • C++博客分享
  • C++初阶——类和对象(三) 构造函数、析构函数
  • 【Gee】项目总结:模仿 GIN 实现简单的 Golang Web 框架
  • Excel(函数篇):Vlookup函数 详细用法
  • 最大公约数+最小公倍数
  • Kubernetes 中metrics-server的采集周期,采集链路是什么样的?
  • Vue学习笔记集--六大指令
  • NAT、代理服务器、内网穿透和内网打洞
  • 【web逆向】优某愿 字体混淆
  • 修改 Macbook 终端窗口的显示信息
  • Leetcode做题记录----3