填数问题

来源:互联网 发布:淘宝如何完成实名认证 编辑:程序博客网 时间:2024/05/16 13:01
在n*n方阵里填入1,2,...,n*n.要求填成如下所示.例如n=4时方阵为:
 
   10  11  12  1
    9  16  13  2
    8  15  14  3
    7    6    5  4
 
  本题较之以前的题目,复杂性上有所提升.不再是用循环列举再用if判断一下就OK的题目了.而且与我们以前学习的打印倒三角形的题目有一定类似.不过二者在方法上有一定区别. 
  二者都是要求打印出符合一定条件的特殊图形.这种类型的题目我们暂时可以分为2类.
  第一类是有一定对称性的几何图形,比如说打印倒三角形或者菱形等.这种题目一般思路   就是找出图形的特点(对称性等)与循环变量(行号,列号)之间的关系.
  我们可以假设行用i表示,列用j表示.我们的目的就是找出i,j与图形之间的对应关系.按   图形形状的不同,复杂性不同.但是都可以看做是在寻找一种或多种"静态关系". 
  第二类是有一定规律性的图形,比如蛇形填数,走棋盘等.这种题目的一般思路就是找出题   目中对图形的限制条件(不能出界,按照一定规则填充等).
  我们用各种循环和If语句将这些“规则”变成程序语句.同样,根据“规则”不同,复杂性也不   同.但是都可以看做是在寻找一种或多种"动态关系".
  在这里我们就要提到在很多时候都要用到的判断方法“预判”.即提前一格判断下一格是否   越界,如果下一格越界就不再移动.这样就能很好控制填充的走向.即y+1 < n.
  在很多情况下,都需要这种预判,不仅对程序的安全性是一种保障,而且避免了一定要走错才能判断出错误这种尴尬情形.只不过要稍微注意下由于是预判,后面的变量要记得+1. 
  每个循环包括四个循环:向一直向下左,然后一直向左走,然后一直向上走,然后一直向右走
   
1.倒填#include<stdio.h>int main(){    int n,i,j,p[50][50];    while(scanf("%d",&n)!=EOF){        int x=1;        for(i=n-1;i>=0;i--){            for(j=n-1;j>=0;j--){                p[i][j]=x++;            }        }        for(i=0;i<n;i++){            for(j=0;j<n;j++){                printf("%3d ",p[i][j]);            }            printf("\n");        }    }    return 0;}

2.蛇形填数#include<stdio.h>int main(){    int n,i,j,p[50][50];    while(scanf("%d",&n)!=EOF){        int x=1;int y=0;        while(x<=n*n){            if(y&1){                if(y>n-1){                    i=n-1;j=y-i;                    for(;j<n;i--,j++){                        p[i][j]=x++;                    }                    y++;                }                else{                    i=y;j=0;                    for(;i>=0;i--,j++){                        p[i][j]=x++;                    }                    y++;                }            }            else{                if(y>n-1){                    j=n-1;i=y-j;                    for(;i<n;j--,i++){                        p[i][j]=x++;                    }                    y++;                }                else{                    j=y;i=0;                    for(;j>=0;i++,j--){                        p[i][j]=x++;                    }                    y++;                }            }        }        for(i=0;i<n;i++){            for(j=0;j<n;j++){                printf("%3d ",p[i][j]);            }            printf("\n");        }    }    return 0;}

3.回转填数#include<stdio.h>int main(){    int n,i,j,p[50][50];    while(scanf("%d",&n)!=EOF){        j=n-1;int x=1;        while(x<=n*n){            for(i=n-j-1;i<=j;i++){                p[i][j]=x++;            }            i--;j--;            for(;j>=n-i-1;j--){                p[i][j]=x++;            }            j++;i--;            for(;i>=j;i--){                p[i][j]=x++;            }            i++;j++;            for(;j<n-1-i;j++){                p[i][j]=x++;            }            j--;        }        for(i=0;i<n;i++){            for(j=0;j<n;j++){                printf("%-3d ",p[i][j]);            }            printf("\n");        }            }    return 0;}

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 ddrops d3吃多了怎么办 ddrops d3滴多了怎么办 维生素d滴多了怎么办 ddrops最后滴不出来的怎么办 ddrops一次滴3滴怎么办 小孩子头睡偏了怎么办 7岁儿童头睡偏了怎么办 婴儿后脑睡平了怎么办 六个月宝宝免疫力低怎么办 十个月宝宝食烧怎么办 6个月宝宝感冒了怎么办 5个月宝宝腿短怎么办 5个月宝宝太瘦怎么办 宝宝喝了浓奶粉怎么办 一岁把尿不尿怎么办 五个月的宝宝大便干燥怎么办 婴儿便秘怎么办什么方法最有效 8个月小孩便秘怎么办 1个月新生儿便秘怎么办 新生儿头竖立0分怎么办 20天的宝宝便秘怎么办 出生23天的宝宝便秘怎么办 喝奶粉的宝宝便秘怎么办 抱孩子抱的驼背怎么办 4岁宝宝不拉屎怎么办 小朋友大便拉不出来怎么办 儿童便秘拉不出来怎么办 没感冒喉咙有痰怎么办 宝宝喂不进去药怎么办 新生儿只放屁不拉大便怎么办 新生儿腹胀不拉大便怎么办 8月宝宝咳嗽有痰怎么办 2个月婴儿惊吓怎么办 吃了米粉不拉屎怎么办 奇异果奶昔苦了怎么办 8个月宝宝偏瘦怎么办 一岁宝宝螺旋腿怎么办 七个月宝宝晚上咳嗽厉害怎么办 孕7个月感冒咳嗽怎么办 4个月婴儿肺炎怎么办 宝宝吃胡萝卜泥拉肚子怎么办