1083 Cantor表&& 1160 蛇形矩阵

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1083 Cantor表&& 1160 蛇形矩阵相关的知识,希望对你有一定的参考价值。

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

#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 蛇形矩阵的主要内容,如果未能解决你的问题,请参考以下文章

3.Cantor表

Cantor表

洛谷 P1014 Cantor表

Cantor表

Cantor表

洛谷——P1014 Cantor表