码迷,mamicode.com
首页 > 其他好文 > 详细

小谈边界问题

时间:2014-08-01 13:41:28      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:边界问题   数学   

边界问题主要有两种,动态关系的,还有就是静态关系的.
第一类是有一定对称性的几何图形,比如说打印倒三角形或者菱形等.这种题目一般思路就是找出图形的特点(对称性等)与循环变量(行号,列号)之间的关系.
我们可以假设行用i表示,列用j表示.我们的目的就是找出i,j与图形之间的对应关系.按图形形状的不同,复杂性不同.但是都可以看做是在寻找一种或多种"静态关系". 
这类题主要有打印三角形,代码如下:
#include<stdio.h>
#include<string.h>
int main()
{
	int i,j,n,m;
	char a[110][110];
	scanf("%d",&n);
	while(n--)
	{
		memset(a,0,sizeof(a));
		scanf("%d",&m);
		for(i=1;i<=m/2;i++)
		{
			for(j=1;j<=m;j++)
			{
				if(j<=m-i+1&&j>=i)
				a[i][j]='*';
				else
				a[i][j]=' ';
			}
		}
		for(;i<=m;i++)
		{
			for(j=1;j<=i;j++)
			{
				if(j>=m-i+1&&j<=i)
				a[i][j]='*';
				else
				a[i][j]=' ';
			}
		}
		for(i=1;i<=m/2;i++)
		{
			for(j=1;j<=m;j++)
			{
				if(i+j>m+1)
				break;
				printf("%c",a[i][j]);
			}
			
			printf("\n");
		}
		for(;i<=m;i++)
		{
			for(j=1;j<=i;j++)
			printf("%c",a[i][j]);
			printf("\n");
		}
	}
	return 0;
}

//这是放大的X的代码 有异曲同工之妙 故粘贴如下 
#include<stdio.h>
#include<string.h>
int main()
{
    int n,i,j,m;
    char a[82][82];
    scanf("%d",&m);
    getchar();
    while(m--)
    {
        memset(a,0,sizeof(a));
        scanf("%d",&n);
        for(i=1;i<=n;i++)
        {
            for(j=1;j<=n;j++)
            {
                if(i==j||j==n-i+1)
                a[i][j]='X';
                else
                a[i][j]=' ';
            }
        }
        for(i=1;i<=n/2;i++)
        {
            for(j=1;j<=n;j++)
            {
                if(j+i>n+1)
                break;
                printf("%c",a[i][j]);
            }
            printf("\n");
        }
        for(;i<=n;i++)
        {
            for(j=1;j<=i;j++)
            {
                printf("%c",a[i][j]);
            }
            printf("\n");
        }
        printf("\n");
    }
    return 0;
}

第二类是有一定规律性的图形,比如蛇形填数,走棋盘等.这种题目的一般思路就是找出题   目中对图形的限制条件(不能出界,按照一定规则填充等).
我们用各种循环和If语句将这些“规则”变成程序语句.同样,根据“规则”不同,复杂性也不   同.但是都可以看做是在寻找一种或多种"动态关系".
现将蛇形填数代码粘贴如下:
#include<stdio.h>
#include<string.h>
int main()
{
	int a[110][110];
	int x,y,n,m;
	scanf("%d",&n);
	memset(a,0,sizeof(a));
	m=a[x=0][y=n-1]=1;
	while(m<n*n)
	{
		while(x+1<n&&!a[x+1][y])
		a[++x][y]=++m;
		while(y-1>=0&&!a[x][y-1])
		a[x][--y]=++m;
		while(x-1>=0&&!a[x-1][y])
		a[--x][y]=++m;
		while(y+1<n&&!a[x][y+1])
		a[x][++y]=++m;
	}
	for(x=0;x<n;x++)
	{
		for(y=0;y<n;y++)
		{
			printf("%3d",a[x][y]);
		}
		printf("\n");
	}
	return 0;
}

小谈边界问题,布布扣,bubuko.com

小谈边界问题

标签:边界问题   数学   

原文地址:http://blog.csdn.net/ice_alone/article/details/38334249

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!