您的位置:首页 > 编程语言 > C语言/C++

蓝桥杯之最简单的分治法-----数字旋转方阵

2016-03-19 01:09 387 查看
有一个N*N的方阵,如图要求如图数出这个方阵

首先我们讲讲分治法,分治,分治,分而治之

我们将这张图片分为这样

1,2,3,4,5这列为一组             输入时候,只需要行数加1

6,7,8,9,10这行为一组    输入时候,只需要列数加1

11,12,13,14,15这行为一组    输入时候,只需要行数减1

16,17,18,19,20这行为一组    输入时候,只需要列数减1

此为分而治之#include<stdio.h>
#define n 10
int data

={0};
void full(int number,int begin,int size);
void outprint(int size);
int main(){
int a;
printf("输入阶数小于10");
scanf("%d",&a);
full(1,0,a);
outprint(a);
return 0;
}
void full(int number,int begin,int size){
int i,j,k;
if(size==0)
return;
if(size==1){
data[begin][begin]=number;
return;
}
i=begin;
j=begin;
for(k=0;k<size-1;k++){
data[i][j]=number;
number++;
i++;
}
for(k=0;k<size-1;k++){
data[i][j]=number;
number++;
j++;
}
for(k=0;k<size-1;k++){
data[i][j]=number;
number++;
i--;
}
for(k=0;k<size-1;k++){
data[i][j]=number;
number++;
j--;
}
full(number,begin+1,size-2); //我唯一不太明白的是为什么是size-2,最后才知道,每次完了之后上面最上面那一阶和最下面那一阶<span style="white-space:pre"> </span>//都有内容这样就损失了两阶
return ;
}
void outprint(int size){
int i,j;
for(i=0;i<size;i++){

for(j=0;j<size;j++){
printf("%4d",data[i][j]);
}printf("\n");
}
return ;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 算法