描述 一个n行n列的二维数组,请你求左对角数字的 和与积 (注意和与积的初始化)[ 2 < = n < = 10 2<=n<=10] 输入 输入n+1行 第一行为n ([ 2 < = n < = 10 2<=n<=10]) 后面的n行 每行n个整数 用空格隔开(每个数字不超过9) 输出 两个整数 左对角的和和积,用换行隔开 输入样例 1 3 1 2 5 3 4 8 7 6 9 输出样例1 14 36 c++ 代码
时间: 2024-02-24 09:53:31 浏览: 102
以下是C++代码实现:
```cpp
#include <iostream>
using namespace std;
int main() {
int n, sum = 0, prod = 1;
cin >> n;
int a[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> a[i][j];
if (i == j) {
sum += a[i][j];
prod *= a[i][j];
}
}
}
cout << sum << endl << prod << endl;
return 0;
}
```
输入样例:
```
3
1 2 5
3 4 8
7 6 9
```
输出样例:
```
14
36
```
相关问题
用简单的C语言进行编程 问题描述:输入一个二维数组,如果相邻三及以上个数字相同则将这些数变为零,输出 消除后的二维数组表
要使用C语言编写这样的程序,你可以先定义一个二维数组结构,然后遍历数组,检查连续的元素是否相等。如果找到连续相等的数字超过两个,就将它们以及它们之间的数字都置为0。以下是一个简单的示例:
```c
#include <stdio.h>
#define ROWS 5
#define COLS 6
// 用于表示二维数组的数据类型
typedef struct {
int data;
} Cell;
// 检查并替换连续相同的数字
void replaceConsecutiveZeros(Cell* arr, int rows, int cols) {
for (int i = 0; i < rows - 2; ++i) {
for (int j = 0; j < cols - 2; ++j) {
if (arr[i][j] == arr[i + 1][j] && arr[i][j] == arr[i + 2][j]) { // 横向检查
arr[i][j] = arr[i + 1][j] = arr[i + 2][j] = 0;
}
else if (arr[i][j] == arr[i][j + 1] && arr[i][j] == arr[i][j + 2]) { // 竖向检查
arr[i][j] = arr[i][j + 1] = arr[i][j + 2] = 0;
}
else if (i > 0 && j > 0 && arr[i][j] == arr[i - 1][j - 1] && arr[i][j] == arr[i - 1][j + 1] && arr[i][j] == arr[i + 1][j - 1] && arr[i][j] == arr[i + 1][j + 1]) { // 对角线检查
arr[i][j] = arr[i - 1][j - 1] = arr[i - 1][j + 1] = arr[i + 1][j - 1] = arr[i + 1][j + 1] = 0;
}
}
}
}
// 打印二维数组
void printArray(Cell* arr, int rows, int cols) {
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < cols; ++j) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
}
int main() {
Cell array[ROWS][COLS] = {
{1, 0, 0, 0, 0, 0},
{0, 1, 1, 1, 0, 0},
{0, 1, 1, 1, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0}
};
replaceConsecutiveZeros(array, ROWS, COLS);
printf("Transformed array:\n");
printArray(array, ROWS, COLS);
return 0;
}
```
这个程序首先定义了一个二维数组`array`,然后调用`replaceConsecutiveZeros`函数处理数组。之后,我们打印出处理后的结果。
用c++解决 已知地图中的描述,是根据陆地和海水交错排布的,其中数字表示陆地的面积大小,0表示海水,被水围起来的区域称为“岛屿”,由于这次悟空手中有一件法宝可以使两块对角线相邻的陆地能够互通。已知师徒四人处在(m,n)点,请你按照八戒的提示编写程序,计算所在岛屿的面积。(注:地图使用二维数组存储,地图的大小不超过50*50)输入: m+1行第一行四个整数m,n,x,y其中m和n表示图的行和列,x和y表示你所处的横纵坐标。剩下m行每行n个数字分别代表陆地的面积大小 输出: 你所在岛屿的面积
这是一道典型的搜索题目,可以使用 DFS 或 BFS 进行求解。下面给出基于 DFS 的 C++ 代码实现:
```
#include <iostream>
#include <cstring>
using namespace std;
const int N = 55;
int n, m, x, y;
int g[N][N];
bool st[N][N];
int dx[8] = {-1, -1, -1, 0, 0, 1, 1, 1};
int dy[8] = {-1, 0, 1, -1, 1, -1, 0, 1};
int dfs(int x, int y)
{
if (x < 0 || x >= n || y < 0 || y >= m) return 0;
if (st[x][y] || !g[x][y]) return 0;
st[x][y] = true;
int res = g[x][y];
for (int i = 0; i < 8; i ++ )
{
int a = x + dx[i], b = y + dy[i];
res += dfs(a, b);
}
return res;
}
int main()
{
cin >> n >> m >> x >> y;
for (int i = 0; i < n; i ++ )
for (int j = 0; j < m; j ++ )
cin >> g[i][j];
cout << dfs(x, y) << endl;
return 0;
}
```
在这个例子中,我们使用二维数组 `g` 来存储地图信息,使用二维数组 `st` 来标记每个位置是否已经访问过。对于每个起点 `(x, y)`,我们使用 DFS 来遍历其所在的岛屿。在遍历的过程中,如果当前位置 `(x, y)` 超出地图边界或已经访问过或是海水,则返回 0;否则,将当前位置标记为已访问,并计算当前位置的陆地面积 `res`。然后,依次遍历当前位置的八个相邻位置,并将其返回的陆地面积加到当前位置的陆地面积中。最后,返回当前位置的陆地面积 `res`,即为所在岛屿的面积。
阅读全文