c语言中的Nxn矩阵
#includeiostream.h
void main()
{
int n,N,I,j,* * a;
cout " N =
cinN
A=new int* input odd n output nXn方阵c语言 在VC++6.0下运行过,没有问题。
#包含“stdio.h”
主()
{
int n,I,j,x,y;
for(;;)
{
Printf("输入奇数n:\ n ");
scanf("%d ",n);
if(n%2!=1) printf("您输入的是奇数,请重新输入:\ n ");
else break
}
x = y = n/2;
for(I = 0;在;我)
{
for(j = 0;jn;j)
{
if(j = = ABS(x)| | j = = nN];
for(n=0;nN;)
a[n]=new int[N];
int mk1=0,mk2=0;
for(n=1,i=0,j=0;n=N*N;){
a[i][j]=n;
if(i==0jN-1mk1==0){
j ;
mk1 ;
mk2=0;
n ;
continue;
}
if(j==0iN-1mk2==0){
i ;
mk2 ;
mk1=0;
n ;
continue;
}
if(i==N-1mk1==1){
j ;
mk2 ;
mk1=0;
n ;
continue;
}
if(j==N-1mk2==1){
i ;
mk1 ;
mk2=0;
n ;
continue;
}
if(mk1==1){
i ;
j--;
n ;
continue;
}
if(mk2==1){
i--;
j ;
n ;
continue;
}
}
for(int m=0;mN;m ){
for(int n=0;nN;n ){
couta[m][n]" ";
if(n==N-1)
coutendl;
}
}
for(n=0;nN;n )
delete[] a[n];
delete[] a;
}
大概就是这么个样吧,你试试
C语言:从键盘输入n(n=3,5,7,9),屏幕输出nxn矩阵,且每行每列及两对角线之和均相等,并输出和。咋写?考虑到空间效率,代码用动态二维数组解决——
代码文本:
#include "stdio.h"
#include stdlib.h
int main(int argc,char *argv[]){
char *q,**p,n,i,j,k,t;
int sum;
printf("Enter n(int n=3,5,7,9)...\nn=");
if(scanf("%d",n)==1 (n==3 || n==5 || n==7 || n==9)){
q=(char *)malloc(sizeof(char)*n*n);
if(q (p=(char **)malloc(sizeof(char *)*n))){
for(p[0]=q,i=1;in;p[i ]=p[i-1] n);//组织成n*n二维数组
for(t=n*n,i=0;it;q[i ]=0);//二维数组清0
for(t ,i=0,j=n--1,k=1;kt;p[i--][j ]=k ){//填矩阵
if(i==-1 jn)//if...else if...是填充算法
i =2,j--;
else if(i==-1)
i=n;
else if(jn)
j=0;
else if(p[i][j])
i =2,j--;
}
for(sum=i=0;i=n;i ){
for(j=0;j=n;printf("=",p[i][j ]));
putchar('\n');
sum =p[i][0];
}
free(q);
free(p);
printf("The SUM is %d\n",sum);
}
else{
printf("Application memory failure, exit...\n");
if(q)
free(q);
if(p)
free(p);
}
}
else
printf("Input error, exit...\n");
return 0;
}
(有好几种结果,这是其中之一)
-[ABS(nN];
for(n=0;nN;)
a[n]=new int[N];
int mk1=0,mk2=0;
for(n=1,i=0,j=0;n=N*N;){
a[i][j]=n;
if(i==0jN-1mk1==0){
j ;
mk1 ;
mk2=0;
n ;
continue;
}
if(j==0iN-1mk2==0){
i ;
mk2 ;
mk1=0;
n ;
continue;
}
if(i==N-1mk1==1){
j ;
mk2 ;
mk1=0;
n ;
continue;
}
if(j==N-1mk2==1){
i ;
mk1 ;
mk2=0;
n ;
continue;
}
if(mk1==1){
i ;
j--;
n ;
continue;
}
if(mk2==1){
i--;
j ;
n ;
continue;
}
}
for(int m=0;mN;m ){
for(int n=0;nN;n ){
couta[m][n]" ";
if(n==N-1)
coutendl;
}
}
for(n=0;nN;n )
delete[] a[n];
delete[] a;
}
大概就是这么个样吧,你试试
C语言:从键盘输入n(n=3,5,7,9),屏幕输出nxn矩阵,且每行每列及两对角线之和均相等,并输出和。咋写?考虑到空间效率,代码用动态二维数组解决——
代码文本:
#include "stdio.h"
#include stdlib.h
int main(int argc,char *argv[]){
char *q,**p,n,i,j,k,t;
int sum;
printf("Enter n(int n=3,5,7,9)...\nn=");
if(scanf("%d",n)==1 (n==3 || n==5 || n==7 || n==9)){
q=(char *)malloc(sizeof(char)*n*n);
if(q (p=(char **)malloc(sizeof(char *)*n))){
for(p[0]=q,i=1;in;p[i ]=p[i-1] n);//组织成n*n二维数组
for(t=n*n,i=0;it;q[i ]=0);//二维数组清0
for(t ,i=0,j=n--1,k=1;kt;p[i--][j ]=k ){//填矩阵
if(i==-1 jn)//if...else if...是填充算法
i =2,j--;
else if(i==-1)
i=n;
else if(jn)
j=0;
else if(p[i][j])
i =2,j--;
}
for(sum=i=0;i=n;i ){
for(j=0;j=n;printf("=",p[i][j ]));
putchar('\n');
sum =p[i][0];
}
free(q);
free(p);
printf("The SUM is %d\n",sum);
}
else{
printf("Application memory failure, exit...\n");
if(q)
free(q);
if(p)
free(p);
}
}
else
printf("Input error, exit...\n");
return 0;
}
(有好几种结果,这是其中之一)
-[y))printf(" 1 ");
else printf(" 0 ");
}
x-;
y;
printf(" \ n ");
}
}
最后更新于 2023-10-14 02:14:34 并被添加「」标签,已有 位童鞋阅读过。
本站使用「署名 4.0 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处
相关文章