C++-c++的一道编程题

发布于 2016-11-18 14:05:02 字数 1969 浏览 1242 评论 2

说的是第一行先输入两个数N,M。
接着就用一个二维数组接受每一行,每一列的数据。
接着问题是计算每一个格子的数sum,sum和上下左右有关。
例如输入
2 3 //2行3列
5 -4 3
-1 4 8 //这个是a[][]数组

输出应该是
5 12 -4
9 -3 -7 //这个是sum[][]数组

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
using namespace std;
int main(int argc,char* args[])
{
int N,M,row,T,tt,yy;
int i_1,i_2,i_3,i_4;
row=0;
int **a=NULL;
int **sum=NULL;
scanf("%d",&N);
scanf("%d",&M);
//输入两个数N,M
T=N;
a=(int **)malloc(M*sizeof(int*));
for(int ma=0;ma<=M;ma++)
a[ma]=(int*)malloc(N*sizeof(int));
sum=(int **)malloc(M*sizeof(int*));
for(int za=0;za<=M;za++)
sum[za]=(int*)malloc(N*sizeof(int));
//动态建立两个二维数组。
while(N)
{
for(int i=0;i<M;i++)
scanf("%d",&a[row][i]);
row++;
N--;
}
//数组接受数据
for(int ii=0;ii<T;ii++)
{
for(int jj=0;jj<M;jj++)
{
i_1=0;
i_2=0;
i_3=0;
i_4=0;
if((ii+1)<=(T-1)){i_1=a[ii+1][jj];}
if((jj+1)<=(M-1)){i_2=a[ii][jj+1];}
if((ii-1)>=0){i_3=a[ii-1][jj];}
if((jj-1)>=0){i_4=a[ii][jj-1];}
{if(i_1/a[ii][jj]<0)sum[ii][jj]+=abs(i_1);else sum[ii][jj]-=abs(i_1);}
{if(i_2/a[ii][jj]<0)sum[ii][jj]+=abs(i_2);else sum[ii][jj]-=abs(i_2);}
{if(i_3/a[ii][jj]<0)sum[ii][jj]+=abs(i_3);else sum[ii][jj]-=abs(i_3);}
{if(i_4/a[ii][jj]<0)sum[ii][jj]+=abs(i_4);else sum[ii][jj]-=abs(i_4);}
}
//计算每一个格子的值,值和附近上下左右有关,如果
//一个格子和另外一个格子是异号的,就相加,同理相反
}

for(int iii=0;iii<T;iii++)
{
for(int jjj=0;jjj<M;jjj++)
{
cout<<sum[iii][jjj]<<" ";
}
cout<<endl;
}
//输入每一个格子的得分。
return 0;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

归属感 2017-02-17 17:56:43

因为sum二维数组没有初始化,初始化后是正常的值,不过不知道符不符合题意了。

夜无邪 2017-02-16 20:35:19

//可以去掉 #include <iomanip> 的同时 去掉 <<left << setw( 4 )

//下面的 setiosflags( ios::left ) 和 setw()
//用到了 <iomanip>

#include <iostream>
#include <iomanip>

using namespace std;

int main( void )
{
int n, m;
cin >> n >> m;

int **arr = new int* [n];
for ( int i = 0; i < n; i ++ )
{
arr[i] = new int[m];
}

for ( int i = 0; i < n; i ++ )
{
for ( int j = 0; j < m; j ++ )
{
cin >> arr[i][j];
}
}

cout << endl;

int f, sum;

for ( int i = 0; i < n; i ++ )
{
for ( int j = 0; j < m; j ++ )
{
sum = ( i ? arr[i - 1][j] : 0 ) +
( j ? arr[i][j - 1] : 0 ) +
( i == n - 1 ? 0 : arr[i + 1][j] ) +
( j == m - 1 ? 0 : arr[i][j + 1] );

f = arr[i][j] < 0 ? 1 : -1;
cout << left << setw( 4 ) << sum * f << " ";
}
cout << endl;
}

for ( int i = 0; i < n; i ++ )
{
delete []arr[i];
}
delete []arr;

system("PAUSE");
return EXIT_SUCCESS;
}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文