数组规律

null  •  2年前


include

using namespace std; int main(){

int N[100][100]={};

int n;
cin>>n;
int k = 1,m=n;
int i,j;//i是行,j是列
while(k<=n*n){
	//n的记录m
	//先消竖排 x不变,y增加---
	//规律
	//	j=	5,i从1-5,也就是最后结果i是6
	//	j = 4,i从2-4
	//  j=	3,i从3-3   规律总结:j从m开始,i和j的和等于n+1,结束条件 i==j
	//思路总结:1.找到数字规律,根据i,j来查找规律,  
	//2.通过i,j的初值及变化情况,总结出循环的初始条件、结束条件	
	//3.构造时注意m会动态变化,所以总结饿规律一定要是不变的

	for(j = m,i=n+1-j;i<=j;){
		N[i++][j]=k;
		k++;
	}

	//先消横排 y不变,x减少---
	//规律
	//	i=	5,j从4-1
	//	i = 4,j从3-2		
	//规律总结:i从m开始,j=i-1,结束条件 i+j=n+1
	for(i=m,j=i-1;i+j>=n+1;){
		N[i][j--]=k;
		k++;
	}
	//在消竖排
	//x不变,y++
	//	j=	1,i从4-1,i最终结果是0
	//	j = 2,i从3-2	   
	//规律总结:i从m-1开始,i+j=n,结束条件 i>=j
	for(i=m-1,j=n-i;i>=j;){
		N[i--][j]=k;
		k++;
	}

	//在消横排
	// y不变,x++
	//	i =	1,j从2-4
	//	i = 2,j从3   
	//规律总结:i比上面多1,j=i+1,结束条件 i+j=n

	for(i=i+1,j=i+1;i+j<=n;){
		N[i][j++]=k;
		k++;
	}

	m--;

}

for(int i = 1;i<=n;i++){
	for(int j = 1;j<=n;j++){
		printf("%2d%s",N[i][j]," ");//注意两个数中间有空格隔开
	}
	cout<<endl;
}
return 0;

}


评论:

请先登录,才能进行评论