2014年小米笔试题 蛇形矩阵打印

题目链接:点击打开链接

void printAll(int n){
	int i,j,k;
	int temp = 0;
	int a[100][100];
	//空间复杂度O(n^2),时间复杂度O(n^2)
	for(i = 0; i < 2*n - 1; i++){
		k = n - 1 < i ?n-1: i;
		if(i & 1){
			for(j = k; j >= 0; j--)
				if(i-j>=0 && i-j < n)
					a[i-j][j] = ++temp;
		}else{
			for(j = k; j >= 0; j--)
				if(i-j>=0 && i-j < n)
					a[j][i-j] = ++temp;
		}
	}

	for(i = 0; i < n; i++){
		for(j = 0; j < n; j++)
			printf("%3d ",a[i][j]);
		printf("\n");
	}

	printf("\n");

	//空间复杂度O(1),时间复杂度O(n^2)
	for(i = 0; i < n; i++){
		for(j = 0; j < n; j++){
			if(i+j <= n)
				temp = (i+j+1)*(i+j)/2;
			else
				temp = (n+1)*n/2 + (n - 1 + 2*n - (i + j))*(i+j-n)/2;
			k = n - 1 < i+j ?n-1: i+j;
			if((i+j)&1)
				temp += (k - j + 1);
			else
				temp += (k - i + 1);
			printf("%3d ",temp);
		}
		printf("\n");
	}
	printf("\n");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值