• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

C刷题矩阵相等判断和序列删除指定的数字

武飞扬头像
Dream_Chaser~
帮助3

目录

BC105-矩阵相等判断

方法1:两矩阵输入完毕后,进行比较

方法2:在接收过程中直接比较

BC98 - 序列中删除指定的数字

方法1:把要删除的元素改为0

方法2:打印不用删除的元素

方法3:定义两个下标 i 和 j(动图演示)


此篇文章是关于牛客网刷题的做题思路和代码分享,感谢来访与指点。

C99标准之前:
数组的大小只能是常量来指定int arr[10]

C99支持常量指定数组大小,也支持变长数组。

C99标准中,引入一个: 变长数组的概念,变长数组允许数组的大小使用变量来指定。

int n = 10;

int arr[n];

需要注意变长数组的点:

需要注意的是,使用变长数组的时候,数组的大小必须在定义时就确定,因此不能在定义后再改变数组的大小。

用我之前做过的题来说明一下:

正确写法:先有n的输入,然后再使用n。

  1.  
    int n=0;
  2.  
    scanf("%d",&n);
  3.  
    int arr[n];

学新通

错误写法: n已经使用过了,再输入就没用了。

  1.  
    int n=0;
  2.  
    int arr[n];
  3.  
    scanf("%d",&n);//这样写是错误的。

学新通

BC105-矩阵相等判断

学新通

题目的意思:

题目的意思说简单点就是,要求第一次输入的时候输入这个矩阵到底有几行几列,接着输入第一个矩阵的元素,接着输入第二个矩阵的元素,若两矩阵元素全部相等,则输出“Yes”,否则有一个不相等的元素则输出“NO”

方法1:两矩阵输入完毕后,进行比较

思路:

1.输入矩阵的行数和列数,

2.接着用一个for循环输入元素,数组记为arr1。

3.另一个用一个for循环输入元素,数组记为arr2。

4.定义一个flag作为判断矩阵是否相等的条件

5.两矩阵进行比较,若两矩阵之间有不相等的元素,就把flag=0,接着用goto语句跳出循环。

6.打印Yes or No。

学新通

学新通

  1.  
    #include <stdio.h>
  2.  
    int main() {
  3.  
    int n=0;
  4.  
    int m=0;
  5.  
    scanf("%d %d",&n,&m);
  6.  
    int arr1[n][m];
  7.  
    int arr2[n][m];
  8.  
    int i=0;
  9.  
    int j=0;
  10.  
    //接收第1个数组的内容
  11.  
    for(i=0;i<n;i )
  12.  
    {
  13.  
    for(j=0;j<m;j )
  14.  
    {
  15.  
    scanf("%d",&arr1[i][j]);
  16.  
    }
  17.  
    }
  18.  
    //接收第2个数组的内容
  19.  
    for(i=0;i<n;i )
  20.  
    {
  21.  
    for(j=0;j<m;j )
  22.  
    {
  23.  
    scanf("%d",&arr2[i][j]);
  24.  
    }
  25.  
    }
  26.  
    //比较
  27.  
    int flag=1;//假设是相等的
  28.  
    for(i=0;i<n;i )
  29.  
    {
  30.  
    for(j=0;j<m;j )
  31.  
    {
  32.  
    if(arr1[i][j]!=arr2[i][j])
  33.  
    {
  34.  
    flag=0;
  35.  
    goto end;
  36.  
    }
  37.  
    }
  38.  
    }
  39.  
    end:
  40.  
    if(flag==1)
  41.  
    printf("Yes\n");
  42.  
    else
  43.  
    printf("No\n");
  44.  
    return 0;
  45.  
    }
学新通

提交: 

学新通

方法2:在接收过程中直接比较

学新通

  1.  
    int main() {
  2.  
    int n=0;
  3.  
    int m=0;
  4.  
    scanf("%d %d",&n,&m);
  5.  
    int arr1[n][m];
  6.  
    int i=0;
  7.  
    int j=0;
  8.  
    //接收第一个数组的内容
  9.  
    for(i=0;i<n;i )
  10.  
    {
  11.  
    for(j=0;j<m;j )
  12.  
    {
  13.  
    scanf("%d",&arr1[i][j]);
  14.  
    }
  15.  
    }
  16.  
    //接收第2个数组的内容,并比较
  17.  
    int tmp=0;
  18.  
    int flag=1;//假设是相等的
  19.  
    for(i=0;i<n;i )
  20.  
    {
  21.  
    for(j=0;j<m;j )
  22.  
    {
  23.  
    scanf("%d",&tmp);
  24.  
    if(tmp != arr1[i][j])
  25.  
    {
  26.  
    flag=0;
  27.  
    goto end;
  28.  
    }
  29.  
    }
  30.  
    }
  31.  
    end:
  32.  
    if(flag==1)
  33.  
    printf("Yes\n");
  34.  
    else
  35.  
    printf("No\n");
  36.  
    return 0;
  37.  
    }
学新通

执行:

学新通

BC98 - 序列中删除指定的数字

方法1:把要删除的元素改为0

思路:

1.先定义数组大小为n,接着通过for循环输入数组的元素。

2.定义变量del作为要删除的元素,输入要删除的元素。遍历数组,若此刻arr[i]遇到del,则把arr[i]改成0

3.把输入的数组里面不为0的元素全打印了。

学新通

  1.  
    int main() {
  2.  
    int n=0;
  3.  
    int m=0;
  4.  
    scanf("%d",&n);
  5.  
    int arr[n];
  6.  
    int i=0;
  7.  
    for(i=0;i<n;i )
  8.  
    {
  9.  
    scanf("%d",&arr[i]);
  10.  
    }
  11.  
    int del=0;
  12.  
    scanf("%d",&del);
  13.  
    for(i=0;i<n;i )
  14.  
    {
  15.  
    if(arr[i]==del)
  16.  
    arr[i]=0;//将要删除的元素改为0
  17.  
    }
  18.  
    for(i=0;i<n;i )
  19.  
    {
  20.  
    if(arr[i]!=0)//打印不是0的元素
  21.  
    {
  22.  
    printf("%d ",arr[i]);
  23.  
    }
  24.  
    }
  25.  
    return 0;
  26.  
    }
学新通

学新通 

方法2:打印不用删除的元素

思路:输入要删除的元素del之后,直接打印数组,用一个判断条件跳过要删除的元素,打印其它不用删除的。

  1.  
    int main() {
  2.  
    int n=0;
  3.  
    int m=0;
  4.  
    scanf("%d",&n);
  5.  
    int arr[n];
  6.  
    int i=0;
  7.  
    for(i=0;i<n;i )
  8.  
    {
  9.  
    scanf("%d",&arr[i]);
  10.  
    }
  11.  
    int del=0;
  12.  
    scanf("%d",&del);
  13.  
    for(i=0;i<n;i )
  14.  
    {
  15.  
    if(arr[i]!=del)
  16.  
    {
  17.  
    printf("%d ",arr[i]);
  18.  
    }
  19.  
    }
  20.  
    return 0;
  21.  
    }
学新通

学新通

方法3:定义两个下标 i 和 j(动图演示)

动图演示的过程:

学新通

  1.  
    #include<stdio.h>
  2.  
    int main()
  3.  
    {
  4.  
    int n=0;
  5.  
    //int m=0;
  6.  
    scanf("%d",&n);
  7.  
    int arr[n];
  8.  
    int i=0;
  9.  
    int j=0;
  10.  
    for(i=0;i<n;i )
  11.  
    {
  12.  
    scanf("%d",&arr[i]);
  13.  
    }
  14.  
    int del=0;
  15.  
    scanf("%d",&del);
  16.  
    for(i=0;i<n;i )
  17.  
    {
  18.  
    if(arr[i]!=del)
  19.  
    {
  20.  
    arr[j ]=arr[i];
  21.  
    }
  22.  
    }
  23.  
    for(i=0;i<j;i )
  24.  
    {
  25.  
    printf("%d ",arr[i]);
  26.  
    }
  27.  
    return 0;
  28.  
    }
学新通

学新通

 本篇结束,若有错误,欢迎大家指正,感谢支持!

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfeaakh
系列文章
更多 icon
同类精品
更多 icon
继续加载