A 矩阵边缘之和
题意
输入应该整数矩阵。
输出所有第一行和最后一行的元素之和然后进行相加。
思路
- 1 第一行第一列最后一行最后一行的和减去四个角的数 。
坑点
- 1.for循环的使用。
- 2.输出格式。
代码
#include<stdio.h>
int num[100000][100000] ;//定义行和列的范围
int main()
{
int n,m;//定义n行m列
scanf("%d %d",&n,&m);//输入n行m列
for(int i=0;i<n;i++)//先循环 n行
{
for(int j=0;j<m;j++)//再循环m列
{
scanf("%d",&num[i][j]);//循环里输入i行j列
}
}
int sum=0;//定义和sum为0
for(int i=0;i<m;i++)//循环m列 先从0开始循环 到m列之前结束
{
sum=sum+num[0][i];//加上第一行的数
sum=sum+num[n-1][i];//加上最后一行的数
}
for(int i=0;i<n;i++)//循环n行 先从0开始循环 到n行之前结束
{
sum=sum+num[i][0];//加上第一列的数
sum=sum+num[i][m-1];//加上最后一列的数
}
printf("%d",sum-num[0][0]-num[0][m-1]-num[n-1][0]-num[n-1][m-1]);//输出的值是 和(sum)减去四个重复加过的
return 0;
}
总结
难度中等 循环的嵌套 for的判断。
B 二维数组右上左下遍历
题意
输入一个二维数组,输出右上左下遍历。
思路
- 1.右上左下遍历。
坑点
- 1.输入输出的用法。
- 2.break的使用。
代码
#include<stdio.h>
int num[1000][1000]; //定义num数组的范围
int main()
{
int n,m;//定义n行m列
scanf("%d %d",&n,&m);//输入n行m列
for(int i=0;i<n;i++)//整个循环先从n行开始循环 从0开始,到n行结束
{
for(int j=0;j<m;j++)//再从m列开始循环 从0开始,到m列结束
{
scanf("%d",&num[i][j]);//输入num[i][j]的数组
}
}
for(int i=0;i<m;i++)//左上部分的循环
{
int x=0;//行
int y=i; //列 i是变动的
for(int j=0;j<n;j++)//每条线上最多n个数。比如(n行n列的对角线)
{
if(x>=0&&x<n&&y>=0&&y<m)//行和列需要在合法的区间内
{
printf("%d\n",num[x][y]);//合法则输出
x++;//行+1
y--;//列-1
}
else
{
break;//不合法则打断它,进入到下一个起点
}
}
}
for(int i=1;i<n;i++)//右下半部分
{
int x=i;//行
int y=m-1; //列
for(int j=0;j<n;j++)//每条线上最多n个数。比如(n行n列的对角线)
{
if(x>=0&&x<n&&y>=0&&y<m)//行和列需要在合法的范围内
{
printf("%d\n",num[x][y]);//输出x行y列
x++;//行+1
y--;//列-1
}
else
{
break;//不合法输出就打断它
}
}
}
return 0;
}
总结
难度困难 冒泡排序 break。