C刷题矩阵相等判断和序列删除指定的数字
目录
此篇文章是关于牛客网刷题的做题思路和代码分享,感谢来访与指点。
C99标准之前:
数组的大小只能是常量来指定int arr[10]
C99支持常量指定数组大小,也支持变长数组。
C99标准中,引入一个: 变长数组的概念,变长数组允许数组的大小使用变量来指定。
int n = 10;
int arr[n];
需要注意变长数组的点:
需要注意的是,使用变长数组的时候,数组的大小必须在定义时就确定,因此不能在定义后再改变数组的大小。
用我之前做过的题来说明一下:
正确写法:先有n的输入,然后再使用n。
-
int n=0;
-
scanf("%d",&n);
-
int arr[n];
错误写法: n已经使用过了,再输入就没用了。
-
int n=0;
-
int arr[n];
-
scanf("%d",&n);//这样写是错误的。
BC105-矩阵相等判断
题目的意思:
题目的意思说简单点就是,要求第一次输入的时候输入这个矩阵到底有几行几列,接着输入第一个矩阵的元素,接着输入第二个矩阵的元素,若两矩阵元素全部相等,则输出“Yes”,否则有一个不相等的元素则输出“NO”
方法1:两矩阵输入完毕后,进行比较
思路:
1.输入矩阵的行数和列数,
2.接着用一个for循环输入元素,数组记为arr1。
3.另一个用一个for循环输入元素,数组记为arr2。
4.定义一个flag作为判断矩阵是否相等的条件
5.两矩阵进行比较,若两矩阵之间有不相等的元素,就把flag=0,接着用goto语句跳出循环。
6.打印Yes or No。
-
#include <stdio.h>
-
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;
-
//接收第1个数组的内容
-
for(i=0;i<n;i )
-
{
-
for(j=0;j<m;j )
-
{
-
scanf("%d",&arr1[i][j]);
-
}
-
}
-
//接收第2个数组的内容
-
for(i=0;i<n;i )
-
{
-
for(j=0;j<m;j )
-
{
-
scanf("%d",&arr2[i][j]);
-
}
-
}
-
//比较
-
int flag=1;//假设是相等的
-
for(i=0;i<n;i )
-
{
-
for(j=0;j<m;j )
-
{
-
if(arr1[i][j]!=arr2[i][j])
-
{
-
flag=0;
-
goto end;
-
}
-
}
-
}
-
end:
-
if(flag==1)
-
printf("Yes\n");
-
else
-
printf("No\n");
-
return 0;
-
}
提交:
方法2:在接收过程中直接比较
-
int main() {
-
int n=0;
-
int m=0;
-
scanf("%d %d",&n,&m);
-
int arr1[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]);
-
}
-
}
-
//接收第2个数组的内容,并比较
-
int tmp=0;
-
int flag=1;//假设是相等的
-
for(i=0;i<n;i )
-
{
-
for(j=0;j<m;j )
-
{
-
scanf("%d",&tmp);
-
if(tmp != arr1[i][j])
-
{
-
flag=0;
-
goto end;
-
}
-
}
-
}
-
end:
-
if(flag==1)
-
printf("Yes\n");
-
else
-
printf("No\n");
-
return 0;
-
}
执行:
BC98 - 序列中删除指定的数字
方法1:把要删除的元素改为0
思路:
1.先定义数组大小为n,接着通过for循环输入数组的元素。
2.定义变量del作为要删除的元素,输入要删除的元素。遍历数组,若此刻arr[i]遇到del,则把arr[i]改成0
3.把输入的数组里面不为0的元素全打印了。
-
int main() {
-
int n=0;
-
int m=0;
-
scanf("%d",&n);
-
int arr[n];
-
int i=0;
-
for(i=0;i<n;i )
-
{
-
scanf("%d",&arr[i]);
-
}
-
int del=0;
-
scanf("%d",&del);
-
for(i=0;i<n;i )
-
{
-
if(arr[i]==del)
-
arr[i]=0;//将要删除的元素改为0
-
}
-
for(i=0;i<n;i )
-
{
-
if(arr[i]!=0)//打印不是0的元素
-
{
-
printf("%d ",arr[i]);
-
}
-
}
-
return 0;
-
}
方法2:打印不用删除的元素
思路:输入要删除的元素del之后,直接打印数组,用一个判断条件跳过要删除的元素,打印其它不用删除的。
-
int main() {
-
int n=0;
-
int m=0;
-
scanf("%d",&n);
-
int arr[n];
-
int i=0;
-
for(i=0;i<n;i )
-
{
-
scanf("%d",&arr[i]);
-
}
-
int del=0;
-
scanf("%d",&del);
-
for(i=0;i<n;i )
-
{
-
if(arr[i]!=del)
-
{
-
printf("%d ",arr[i]);
-
}
-
}
-
return 0;
-
}
方法3:定义两个下标 i 和 j(动图演示)
动图演示的过程:
-
#include<stdio.h>
-
int main()
-
{
-
int n=0;
-
//int m=0;
-
scanf("%d",&n);
-
int arr[n];
-
int i=0;
-
int j=0;
-
for(i=0;i<n;i )
-
{
-
scanf("%d",&arr[i]);
-
}
-
int del=0;
-
scanf("%d",&del);
-
for(i=0;i<n;i )
-
{
-
if(arr[i]!=del)
-
{
-
arr[j ]=arr[i];
-
}
-
}
-
for(i=0;i<j;i )
-
{
-
printf("%d ",arr[i]);
-
}
-
return 0;
-
}
本篇结束,若有错误,欢迎大家指正,感谢支持!
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfeaakh
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13