目录
BC105-矩阵相等判断
方法1:两矩阵输入完毕后,进行比较
方法2:在接收过程中直接比较
BC98 - 序列中删除指定的数字
方法1:把要删除的元素改为0
方法2:打印不用删除的元素
方法3:定义两个下标 i 和 j(动图演示)
此篇文章是关于牛客网刷题的做题思路和代码分享,感谢来访与指点。
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;
}
本篇结束,若有错误,欢迎大家指正,感谢支持!