7-4 h0032. 平方矩阵 (15 分) 输入整数N,输出一个N阶的二维数组。

输入格式: 输入包含多行,每行包含一个整数N。0≤N≤100 当输入行为N=0时,表示输入结束,且该行无需作任何处理。 输出格式: 对于每个输入整数N,输出一个满足要求的N阶二维数组。 每个数组占N行,每行包含N个用空格隔开的整数。 每个数组输出完毕后,输出一个空行。

1
2
3
4
5
0

1

1 2
2 1

1 2 3
2 1 2
3 2 1

1 2 3 4
2 1 2 3
3 2 1 2
4 3 2 1

1 2 3 4 5
2 1 2 3 4
3 2 1 2 3
4 3 2 1 2
5 4 3 2 1

#include<stdio.h>
#include<math.h>
int main(){
    int N,k;
    while(scanf("%d",&N)!=0){
        int a[N][N];
        for(int i=0;i<N;i++){
            for(int j=i,k=1;j<N;j++,k++){
                if(i==j)
                    a[i][j]=1;
                else{
                    a[i][j]=k;
                    a[j][i]=k;
                }
            }            
        }
        for(int i=0;i<N;i++){
            for(int j=0;j<N;j++)
                printf("%d",a[i][j]);
            printf("\n");
        }
        printf("\n");
    } 
} 

img


代码总是超时如何改进提高效率

修改处见注释,供参考:

#include<stdio.h>
//#include<math.h> 修改
#define N 101    //修改
int main(){
    int n,k,a[N][N]; //修改
    while(scanf("%d",&n)==1 && n !=0){ //while(scanf("%d",&N)!=0){ 修改
        for(int i=0;i<n;i++){
            for(int j=i,k=1;j<n;j++,k++){
                if(i==j)
                    a[i][j]=1;
                else{
                    a[i][j]=k;
                    a[j][i]=k;
                }
            }
        }
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++)
                printf(" %d",a[i][j]);//修改 每行包含N个用空格隔开的整数
            printf("\n");
        }
        printf("\n");
    }
    return 0;
}