网站建设和维护合同,深圳营销型网站建设案例,外贸箱包网站模板,互联网广告服务经营范围05.魔术数组
题目描述
一个 N 行 N 列的二维数组#xff0c;如果它满足如下的特性#xff0c;则成为“魔术数组”#xff1a; 1、从二维数组任意选出 N 个整数。 2、选出的 N 个整数都是在不同的行且在不同的列。 3、在满足上述两个条件下#xff0c;任意选出来的 N 个整…05.魔术数组
题目描述
一个 N 行 N 列的二维数组如果它满足如下的特性则成为“魔术数组” 1、从二维数组任意选出 N 个整数。 2、选出的 N 个整数都是在不同的行且在不同的列。 3、在满足上述两个条件下任意选出来的 N 个整数的总和都是相等的。 例如这是一个 4×4 的二维数组
140 80 160 60 90 30 110 10 100 40 120 20 130 70 150 50
你会发现任意从里面选出 4 个来自不同行和不同列的整数它们的总和都是 340所以这个二维数组是 “魔术数组”。 现在给出整数 N给出二维数组第一行的 N 个整数再给出二维数组的左上角到右下角的对角线上的 N 个 整数。 你的任务是根据给出的数据构造满足题意的“魔术数组”。 如果有多种方案输出任意一种方案 如果没有方案输出-1。
输入格式 第一行一个整数 N。 1 N 30。 第二行N 个整数表示魔术数组的第一行的 N 个整数。每个整数范围[-1000,1000]。 第三行N 个整数表示魔术数组的左上角到右下角的对角线上面的。
输出格式 N 行 N 列的二维数组表示满足题意的“魔术数组”或者-1。
输入样例
4
140 80 160 60
140 30 120 50
输出样例
140 80 160 60
90 30 110 10
100 40 120 20
130 70 150 50题解仔细观察样例数组就会发现一个规律在数组中选取一个矩形矩形的左下角的元素 左上角 右下角 - 右上角。用代码就是这样a[ i ][ j ]a[ 1 ][ j ]a[ i ][ i ]-a[ 1 ][ i ]。
#includebits/stdc.h
using namespace std;
int n,a[50][50];
int main(){cinn;for(int i1;in;i){cina[1][i];}for(int i1;in;i){cina[i][i];}for(int i2;in;i){for(int j1;jn;j){if(ij) continue;a[i][j]a[1][j]a[i][i]-a[1][i];}}for(int i1;in;i){for(int j1;jn;j){couta[i][j] ;}coutendl;}return 0;
}