牛客网刷题总结(1.有序序列判断,2.获得月份天数,3.矩阵相等判定,4.矩阵转换,5.井字棋判断输赢,6.递归进行进制转化)

简介: 牛客网刷题总结(1.有序序列判断,2.获得月份天数,3.矩阵相等判定,4.矩阵转换,5.井字棋判断输赢,6.递归进行进制转化)

💕"痛苦难以避免,而磨难可以选择。"-->村上春树💕

作者:Mylvzi

文章主要内容:数据在内存中的存储

1.有序序列判断

题目描述:

分析过程:

代码实现:

#include <stdio.h>
int main() 
{
    //定义个数
    int n = 0;
    scanf("%d",&n);
    //循环输入数字
    int arr[n];
    int i = 0;
    for(i=0; i<n; i++)
    {
        scanf("%d",&arr[i]);
    }
    //判断
    int flag1 = 0;//判断升序
    int flag2 = 0;//判断降序
    for(i=0; i<n-1; i++)
    {
        if(arr[i] <arr[i+1])
            flag1 = 1;
        else
            flag2 = 1;
    }
    //如果为unsorted flag1+flag2==2
    if(flag1 + flag2 == 2)
    {
        printf("unsorted");
    }
    else 
    {
    printf("sorted");
    }
    return 0;
}
/*第二种写法,边输入,边判断*/
#include <stdio.h>
//边输入,边判断
int main() 
{
    //定义个数
    int n = 0;
    scanf("%d",&n);
    //循环输入数字 //判断
    int flag1 = 0;//判断升序
    int flag2 = 0;//判断降序
    int arr[n];
    int i = 0;
    for(i=0; i<n; i++)
    {
        scanf("%d",&arr[i]);
        if(i>=1)//只要输了一个元素之后,输入一个就和前面已经输入的数字进行比较
        {
            if(arr[i] <arr[i-1])
                flag1 = 1;
            else
                flag2 = 1;
        }
    }
    if(flag1 + flag2 == 2)
    {
        printf("unsorted");
    }
    else 
    {
    printf("sorted");
    }
    return 0;
}

2.获得月份天数

题目描述:

分析过程:

代码实现:

/*第一种写法,最直观的*/
#include <stdio.h>
int main()
{
  int y, m;
  while (scanf("%d %d", &y, &m) != EOF)
  {
    switch (m)
    {
    //第一种情况
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12:
      printf("31\n");
            break;
    //第二种情况
    case 4:
    case 6:
    case 9:
    case 11:
      printf("30\n");
            break;
    //二月的情况  要判断是否是闰年
    default:
      if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0))
        printf("29\n");
      else
        printf("28\n");
    }
  }
  return 0;
}
/*第二种方法,漂亮的代码*/
#include <stdio.h>
//判断是否为闰年
int is_leap_year(int y)
{
  if((y%4==0 && y%100!=0 ) || (y%400==0))
    return 1;
  else
   return 0;
}
//获取天数
int get_days_of_month(int y,int m)
{
  //使用数组来存放对应的天数
  int d = 0;
  int day[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
  d=day[m];
  if(m==2)
  {
    if(is_leap_year(y)==1)
      d+=1;
  }
  return d;
}
int main() 
{
  //输入年份和月数
  int y = 0;
  int m  = 0;
  while(scanf("%d %d",&y,&m)==2)
  {
    int d = get_days_of_month(y,m);
    printf("%d\n",d);
  }
  return 0;
}

3.矩阵相等判定

题目描述:

分析过程:

代码实现:(第二种方法要学习)

方法一:

#include <stdio.h>
//BC105
//方法一
//判断矩阵是否相等->大小相等,但对应元素未知
int main()
{
    //定义矩阵大小
    int n = 0;
    int m = 0;
    scanf("%d %d", &n, &m);
    //两个矩阵的赋值
    int arr1[n][m];
    int arr2[n][m];
    int i = 0;
    int j = 0;
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
        {
            scanf("%d", &arr1[i][j]);
        }
    }
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
        {
            scanf("%d", &arr2[i][j]);
        }
    }
    //判断是否相等
    int flag = 0;
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
        {
            if (arr1[i][j] != arr2[i][j])
            {
                flag = 1;
            }
        }
    }
    if (1 == flag)
    {
        printf("No\n");
    }
    else {
        printf("Yes\n");
    }
    return 0;
}

方法2:(很不错的一个方法)(main函数也是函数,把它看作一个普通的自定义函数,只有一个返回值)

//BC105
//判断矩阵是否相等->大小相等,但对应元素未知
int main()
{
    //定义矩阵大小
    int n = 0;
    int m = 0;
    scanf("%d %d", &n, &m);
    //两个矩阵的赋值
    int arr1[n][m];
    int arr2[n][m];
    int i = 0;
    int j = 0;
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
        {
            scanf("%d", &arr1[i][j]);
        }
    }
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
        {
            scanf("%d", &arr2[i][j]);
            if (arr2[i][j] != arr1[i][j])
            {
                printf("No\n");
                return 0;
            }
        }
    }
    printf("Yes\n");
    return 0;
}
//BC106上三角形矩阵判定
int main() 
{
    //定义方阵大小
    int n = 0;
    scanf("%d",&n);
    //方阵赋值并判断
    int arr[n][n];
    int i = 0;
    int j = 0;
    for(i=0; i<n; i++)
    {
        for(j=0; j<n; j++)
        {
            scanf("%d",&arr[i][j]);
            if(j<i)//下对角线的条件,j<i
            {
                if(arr[i][j] != 0)
                {
                    printf("NO\n");
                    return 0;
                }
            }
        }
    }
    printf("YES\n");
    return 0;
}

4.矩阵交换

题目描述:

代码实现:

 

#include <stdio.h>
//BC108  矩阵交换
int main()
{
    //定义矩阵大小
    int n = 0;
    int m = 0;
    scanf("%d %d", &n, &m);
    //矩阵赋值
    int i = 0;
    int j = 0;
    int arr[n][m];
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
        {
            scanf("%d", &arr[i][j]);
        }
    }
    //输入进行变幻的次数
    int k = 0;
    scanf("%d", &k);
    //分三种情况进行操作
    int a = 0;//a仅仅是用来循环次数
    while (a < k)
    {
        //先定义要执行的操作
        char ope = 0;
        //定义具体位置
        int x = 0;
        int y = 0;
        while (getchar() != '\n');
        scanf("%c %d %d", &ope, &x, &y);
        switch (ope)
        {
        case 'r'://行操作
            for (j = 0; j < m; j++)
            {
                int temp = arr[x-1][j];
                arr[x-1][j] = arr[y-1][j];
                arr[y-1][j] = temp;
            }
            break;
        case 'c'://列操作
            for (i = 0; i < n; i++)
            {
                int temp = arr[i][x-1];
                arr[i][x-1] = arr[i][y-1];
                arr[i][y-1] = temp;
            }
            break;
        default://不进行操作
            break;
        }
        a++;
    }
    //输出变换后的矩阵
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
        {
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }
    return 0;
}

5.井字棋判断输赢

题目描述:

代码实现:

#include <stdio.h>
//BC110
//判断输赢函数
int is_winner(char arr[3][3], int row, int col)
{
    int x = 0;
    int y = 0;
    char flag = 0;
    //row
    for (x = 0; x < row; x++)
    {
        if (arr[x][0] == arr[x][1] && arr[x][1] == arr[x][2] && arr[x][0] == arr[x][2])
            flag = arr[x][0];
    }
    //col
    for (y = 0; y < col; y++)
    {
        if (arr[0][y] == arr[1][y] && arr[1][y] == arr[2][y] && arr[0][y] == arr[2][y])
            flag = arr[0][y];
    }
    //对角线
    if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2] && arr[0][0] == arr[2][2])
    {
        flag = arr[0][0];
    }
    if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0] && arr[0][2] == arr[2][0])
    {
        flag = arr[0][2];
    }
    return flag;
}
int main()
{
    //用二维数组填充棋盘
    char arr[3][3];
    int i = 0;
    int j = 0;
    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 3; j++)
        {
            scanf("%c", &arr[i][j]);
            getchar();//处理的是字符,注意要清理缓冲区
        }
    }
    //判断输赢
    char ret = is_winner(arr, 3, 3);
    if (ret == 'K')
    {
        printf("KiKi wins!");
    }
    else if (ret == 'B')
    {
        printf("BoBo wins!");
    }
    else 
    {
        printf("No winner!");
    }
    return 0;
}

总结:使用flag标记这种做法是一种很常见的C语言编程过程中使用到的技巧

6.递归进行进制转换

题目描述:

分析过程:

代码实现:

#include <stdio.h>
//BC111
//直接打印出来
void print(int num)
{
    if (num > 5)//保证num<6
    {
        print(num / 6);
    }
    printf("%d", num % 6);
}
int main()
{
    int num = 0;
    scanf("%d", &num);
    print(num);
    return 0;
}

画图理解递归过程:(推出去,再归回来)

目录
相关文章
|
存储 安全 区块链
基于区块链技术的数字身份认证系统设计与实现
传统的身份认证系统存在着诸多安全和隐私风险,而基于区块链技术的数字身份认证系统则具有去中心化、不可篡改的特点。本文将探讨如何利用区块链技术设计和实现一套安全可靠的数字身份认证系统,以及其在实际应用中的潜力和挑战。
1554 12
【推荐】排序模型的评价指标nDCG
nDCG(Normalized Discounted Cumulative Gain)归一化折损累计增益是一种用于评估排序模型性能的指标,它考虑了两个方面:排序的正确性和相关性的程度。
3881 0
|
10月前
|
人工智能 自然语言处理 Java
一文轻松拿下DeepSeek满血版的Api接口接入
本文详细介绍了如何基于阿里云百炼平台快速接入DeepSeek满血版API接口,实现文本问答的智能操作。通过简单的步骤,包括开通平台、创建API-KEY、配置环境变量、安装SDK和调用模型,即使是编程新手也能在5分钟内完成配置。DeepSeek-R1模型拥有671B参数,在数学、代码和自然语言推理等任务上表现出色。文章还提供了完整的Java代码示例,帮助读者轻松上手。链接:[解决方案](https://www.aliyun.com/solution/tech-solution/deepseek-r1-for-platforms?utm_content=g_1000401616)
1955 1
一文轻松拿下DeepSeek满血版的Api接口接入
|
人工智能 测试技术 API
探索通义灵码的无限可能:功能场景与应用实战分析
本文深入探讨了通义灵码在现代软件开发中的应用价值。通过代码补全、单元测试自动生成等功能,通义灵码显著提升了开发效率和代码质量。文章通过具体案例展示了其在团队协作、代码风格一致性和创新项目中的实用性,并展望了未来开发的新趋势。
699 5
探索通义灵码的无限可能:功能场景与应用实战分析
|
负载均衡 应用服务中间件 nginx
基于不同 IP 代理多服务的配置示例
需要注意的是,在实际使用中,根据IP地址进行代理的方式可能存在一定的局限性,并且如果需要代理的IP地址较多,配置可能会变得较为复杂。此时,可以考虑使用更灵活的方式,如基于域名、路径或其他请求特征来进行代理配置。同时,使用 `if` 指令时要注意其可能带来的性能影响和一些潜在的问题,确保配置的准确性和可靠性。
|
存储 缓存 前端开发
JavaEE初阶——初识EE(Java诞生背景,CPU详解)
带你从零入门JAVAEE初阶,Java的发展历程认识什么是cpu,cpu的工作原理,cpu是如何进行计算的,cpu的架构,指令集,cpu的核心,如何提升cpu的算力,cpu的指令,,cup的缓存,cpu的流水线
|
人工智能 前端开发 测试技术
探索前端与 AI 的结合:如何用 GPT-4 助力开发效率
本文介绍了 GPT-4 如何成为前端开发者的“神队友”,让开发变得更加高效愉快。无论是需求到代码的自动生成、快速调试和性能优化,还是自动化测试和技术选型,GPT-4 都能提供极大的帮助。通过智能生成代码、捕捉 BUG、优化性能、自动化测试生成以及技术支持,GPT-4 成为开发者不可或缺的工具,帮助他们从繁重的手动任务中解脱出来,专注于创新和创意。GPT-4 正在彻底改变开发流程,让开发者从“辛苦码农”转变为“效率王者”。
480 0
探索前端与 AI 的结合:如何用 GPT-4 助力开发效率
|
数据可视化 搜索推荐
GUI图形用户界面
【10月更文挑战第8天】
|
缓存 网络协议
Clash连接成功却无法访问
Clash连接成功却无法访问
6519 1
|
并行计算 开发工具
【Deepin 20系统】切换cuda版本命令
文章提供了在Deepin 20系统中切换不同CUDA版本的方法,包括删除旧的软链接和创建指向所需CUDA版本的新软链接,并展示了如何查看当前安装的CUDA版本。
295 2

热门文章

最新文章