给定一个空的int类型的二维数组array[n][m]。
按下面的填充规则, 请编写一个函数将此二维数组填满并打印出来.
输入描述:
输入的包括两个正整数,表示二维数组的大小n,m(1 <= n, m <= 10)。
输出描述:
打印结果,每行行末无空格。
输入例子1:
4 4
输出例子1:
1 2 4 7 3 5 8 11 6 9 12 14 10 13 15 16
递归
#include<cstdio>
#include<iostream>
using namespace std;
int gra[1000][1000];
int ii,jj;
void fun(int i,int j,int a,int b,int n){
gra[i][j]=n;
if (i==a&&j==b){
return;
}
if (j-1<=0||i+1>a){
if(jj+1>b) {
ii=ii+1;
jj=b;
}
else
jj=jj+1;
fun(ii,jj,a,b,n+1);
}
else
fun(i+1,j-1,a,b,n+1);
}
int main(){
int h,l;
while(cin>>h>>l){
for(int i=0;i<=h;++i)
for (int j=0;j<=l;++j)
gra[i][j]=0;
ii=1,jj=1;
fun(1,1,h,l,1);
for(int i=1;i<=h;++i){
for (int j=1;j<=l;++j)
cout<<gra[i][j]<<" ";
cout<<endl;
}
}
return 0;
}
找下标规律
#include <iostream>
#include<stdio.h>
using namespace std;
int main()
{
int n,m;
scanf("%d %d",&n,&m);
int a[100][100]={1},com=1;
if(n>=1&&n<=10&&m>=1&&m<=10) //判断下标是否超出
{
for(int k=1;k<=n*m;k++)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(i+j==k)
{
a[i][k-i]=com+1;
com++;
cout<<com<<endl;
}
}
}
}
for(int i=0;i<n;i++) //输出二维数组
{
for(int j=0;j<m;j++) cout<<a[i][j]<<" ";
cout<<endl;
}
}
else cout<<"error"<<endl;
return 0;
}