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

1083 Cantor表&& 1160 蛇形矩阵

时间:2016-02-21 22:43:04      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:

这种题目一般都是画出前进方向,然后找规律即可,要注意特殊情况的考虑

#include<stdio.h>
#include<stdlib.h>
int main() {
	int n,i,j,k,x,y,flag=0,sum=0;

	//建立动态数组
	scanf("%d",&n);
	int **a;
	a=(int**)malloc(sizeof(int*)*n);
	if(a==NULL) {
		printf("Out of memory!\n");
		exit(-1);
	}
	for(i=0; i<=n-1; i++) {
		a[i]=(int*)malloc(sizeof(int)*n);
		if(a[i]==NULL) {
			printf("Out of memory!\n");
			exit(-1);
		}
	}
	if(n==1)
		printf("1\n1");
	else {//根据→↑←←↓↓→→→↑↑↑←←←←↓↓↓↓→→→→ 找规律 
		i=0;
		j=1;
		x=(n-1)/2;
		y=x;
		a[x][y]=j;//初始化到中央位置 
		while(flag==0) {
			i++;
			for(k=1; k<=i; k++) {
				j++;
				y++;
				a[x][y]=j;
				if(x==n-1&&y==n-1) {
					flag=1;
					break;//最后一步在第一个循环里,做到两重跳出 
				}
			}
			if(flag==1)
				break;
			for(k=1; k<=i; k++) {
				j++;
				x--;
				a[x][y]=j;
			}
			i++;
			for(k=1; k<=i; k++) {
				j++;
				y--;
				a[x][y]=j;
			}
			for(k=1; k<=i; k++) {
				j++;
				x++;
				a[x][y]=j;
			}

		}
		for(i=0; i<=n-1; i++) {
			for(j=0; j<=n-1; j++) {
				printf("%d ",a[i][j]);
				if(i==j||i+j==n-1)
				sum+=a[i][j];//对角线和 
			}
			printf("\n");
		}
		printf("%d",sum);
	}
	return 0;
}

 

#include<stdio.h>
#include<stdlib.h>
int main() {
	int n,circle=1,j,k,count=1,x=1,y=1,flag=0;
	scanf("%d",&n);
	if(n==1) {
		printf("1/1");
	} else {
		for(;;) {
			y++;
			count++;
			if(count==n)
			break;
			for(k=1;k<=2*circle-1;k++)
			{
				x++;y--;
				count++;
				if(count==n)
				{
					flag=1;
					break;
				}
			}
			if(flag==1)
			break;
			x++;
			count++;
			if(count==n)
			break;
			for(k=1;k<=2*circle;k++)
			{
				x--;y++;
				count++;
				if(count==n)
				{
						flag=1;
						break;
				}
			}
			if(flag==1)
			break;
			circle++; 
		}
		printf("%d/%d",x,y);
	}
	return 0;
}

 

1083 Cantor表&& 1160 蛇形矩阵

标签:

原文地址:http://www.cnblogs.com/lhy1024/p/5205736.html

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