首页
社区
课程
招聘
[讨论][第二阶段◇第一题]程序
发表于: 2008-10-19 19:52 15516

[讨论][第二阶段◇第一题]程序

2008-10-19 19:52
15516
收藏
免费 7
支持
分享
最新回复 (49)
雪    币: 993
活跃值: (442)
能力值: ( LV12,RANK:403 )
在线值:
发帖
回帖
粉丝
26
代码见下面,有点乱,当时随手写的,没什么讲究。
// test.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
int t[6][18][3] = 
{
	{
		{ 0, 0, 0 },
		{ 0, 0, 1 },
		{ 0, 1, 0 },
		{ 0, 1, 1 },
		{ 0, 2, 0 },
		{ 0, 2, 1 },
		{ 1, 0, 0 },
		{ 1, 0, 1 },
		{ 1, 1, 0 },
		{ 1, 1, 1 },
		{ 1, 2, 0 },
		{ 1, 2, 1 },
		{ 2, 0, 0 },
		{ 2, 0, 1 },
		{ 2, 1, 0 },
		{ 2, 1, 1 },
		{ 2, 2, 0 },
		{ 2, 2, 1 }
	}
	,
	{
		{-1, 0, 1 },
		{-1, 1, 0 },
		{-1, 1, 1 },
		{-1, 2, 0 },
		{-1, 2, 1 },
		{-1, 3, 0 },
		{-2, 1, 1 },
		{-2, 2, 0 },
		{-2, 2, 1 },
		{-2, 3, 0 },
		{-2, 3, 1 },
		{-2, 4, 0 },
		{-3, 2, 1 },
		{-3, 3, 0 },
		{-3, 3, 1 },
		{-3, 4, 0 },
		{-3, 4, 1 },
		{-3, 5, 0 }
	}
	,
	{
		{-1, 0, 0 },
		{-2, 0, 1 },
		{-2, 1, 0 },
		{-3, 1, 1 },
		{-3, 2, 0 },
		{-4, 2, 1 },
		{-2, 0, 0 },
		{-3, 0, 1 },
		{-3, 1, 0 },
		{-4, 1, 1 },
		{-4, 2, 0 },
		{-5, 2, 1 },
		{-3, 0, 0 },
		{-4, 0, 1 },
		{-4, 1, 0 },
		{-5, 1, 1 },
		{-5, 2, 0 },
		{-6, 2, 1 }
	}
	,
	{
		{-1,-1, 1 },
		{-1,-1, 0 },
		{-2,-1, 1 },
		{-2,-1, 0 },
		{-3,-1, 1 },
		{-3,-1, 0 },
		{-1,-2, 1 },
		{-1,-2, 0 },
		{-2,-2, 1 },
		{-2,-2, 0 },
		{-3,-2, 1 },
		{-3,-2, 0 },
		{-1,-3, 1 },
		{-1,-3, 0 },
		{-2,-3, 1 },
		{-2,-3, 0 },
		{-3,-3, 1 },
		{-3,-3, 0 }
	}
	,
	{
		{ 0,-1, 0 },
		{ 0,-2, 1 },
		{ 0,-2, 0 },
		{ 0,-3, 1 },
		{ 0,-3, 0 },
		{ 0,-4, 1 },
		{ 1,-2, 0 },
		{ 1,-3, 1 },
		{ 1,-3, 0 },
		{ 1,-4, 1 },
		{ 1,-4, 0 },
		{ 1,-5, 1 },
		{ 2,-3, 0 },
		{ 2,-4, 1 },
		{ 2,-4, 0 },
		{ 2,-5, 1 },
		{ 2,-5, 0 },
		{ 2,-6, 1 }
	}
	,
	{
		{ 0,-1, 1 },
		{ 1,-1, 0 },
		{ 1,-2, 1 },
		{ 2,-2, 0 },
		{ 2,-3, 1 },
		{ 3,-3, 0 },
		{ 1,-1, 1 },
		{ 2,-1, 0 },
		{ 2,-2, 1 },
		{ 3,-2, 0 },
		{ 3,-3, 1 },
		{ 4,-3, 0 },
		{ 2,-1, 1 },
		{ 3,-1, 0 },
		{ 3,-2, 1 },
		{ 4,-2, 0 },
		{ 4,-3, 1 },
		{ 5,-3, 0 }
	}
};
int b[12][6][3] =
{
	{
		{0, 0, 1},
		{1, 0, 0},
		{1, 0, 1},
		{0, 1, 0},
		{0, 1, 1},
		{1, 1, 0}
	},
	{
		{1, 0, 0},
		{1, 0, 1},
		{2, 0, 0},
		{0, 1, 1},
		{1, 1, 0},
		{1, 1, 1}
	},
	{
		{2, 0, 1},
		{0, 1, 0},
		{0, 1, 1},
		{1, 1, 0},
		{1, 1, 1},
		{2, 1, 0}
	},
	{
		{1, 0, 0},
		{1, 0, 1},
		{0, 1, 0},
		{0, 1, 1},
		{1, 1, 0},
		{1, 1, 1}
	},
	{
		{0, 0, 0},
		{0, 0, 1},
		{1, 0, 0},
		{1, 0, 1},
		{0, 1, 1},
		{1, 1, 0}
	},
	{
		{0, 0, 0},
		{0, 0, 1},
		{0, 1, 0},
		{0, 1, 1},
		{1, 1, 0},
		{1, 1, 1}
	},
	{
		{1, 0, 0},
		{1, 0, 1},
		{2, 0, 0},
		{0, 1, 0},
		{0, 1, 1},
		{1, 1, 0}
	},
	{
		{1, 0, 1},
		{2, 0, 0},
		{0, 1, 0},
		{0, 1, 1},
		{1, 1, 0},
		{1, 1, 1}
	},
	{
		{1, 0, 1},
		{2, 0, 0},
		{2, 0, 1},
		{0, 1, 0},
		{0, 1, 1},
		{1, 1, 0}
	},
	{
		{1, 0, 1},
		{0, 1, 0},
		{0, 1, 1},
		{1, 1, 0},
		{1, 1, 1},
		{2, 1, 0}
	},
	{
		{1, 0, 1},
		{0, 1, 1},
		{1, 1, 0},
		{1, 1, 1},
		{2, 1, 0},
		{2, 1, 1}
	},
	{
		{0, 0, 0},
		{0, 0, 1},
		{1, 0, 0},
		{1, 0, 1},
		{2, 0, 0},
		{2, 0, 1}
	}
};
int _tmain(int argc, _TCHAR* argv[])
{
	int i, j, k, x, y;
	int z[6][3];

	for(i=0; i<12; i++)
	{
		for(j=0; j<6; j++) for(k=0; k<3; k++) z[j][k] = b[i][j][k];
		printf("{");
		for(j=0; j<6; j++)
		{
			printf(" 0x%06X", (z[j][0]<<16)|(z[j][1]<<8)|z[j][2]);
			if (j<5) printf(",");
		}
		printf("},\n");
		for(j=1; j<6; j++)
		{
			x = 20; y = 20;
			for(k=0; k<6; k++)
			{
				z[k][0] = t[j][b[i][k][1]*6+b[i][k][0]*2+b[i][k][2]][0];
				z[k][1] = t[j][b[i][k][1]*6+b[i][k][0]*2+b[i][k][2]][1];
				z[k][2] = t[j][b[i][k][1]*6+b[i][k][0]*2+b[i][k][2]][2];
				if (z[k][0] < x) x = z[k][0];
				if (z[k][1] < y) y = z[k][1];
			}
			for(k=0; k<6; k++)
			{
				z[k][0] -= x;
				z[k][1] -= y;
			}
			printf("{");
			for(k=0; k<6; k++)
			{
				printf(" 0x%06X", (z[k][0]<<16)|(z[k][1]<<8)|z[k][2]);
				if (k<5) printf(",");
			}
			printf("},\n");
		}
		x = 20; y = 20;
		for(k=0; k<6; k++)
		{
			z[k][0] = t[0][b[i][k][1]*6+b[i][k][0]*2+b[i][k][2]][0];
			z[k][1] = t[0][b[i][k][1]*6+b[i][k][0]*2+b[i][k][2]][1];
			z[k][2] = t[0][b[i][k][1]*6+b[i][k][0]*2+b[i][k][2]][2];
			if (z[k][0] < x) x = z[k][0];
			if (z[k][1] < y) y = z[k][1];
		}
		for(k=0; k<6; k++)
		{
			z[k][0] -= x;
			z[k][1] -= y;
		}
		printf("{");
		for(k=0; k<6; k++)
		{
			printf(" 0x%06X", (z[k][0]<<16)|(z[k][1]<<8)|z[k][2]);
			if (k<5) printf(",");
		}
		printf("},\n");
		for(j=0; j<6; j++) for(k=0; k<3; k++) b[i][j][k] = z[j][k];
		for(j=1; j<6; j++)
		{
			x = 20; y = 20;
			for(k=0; k<6; k++)
			{
				z[k][0] = t[j][b[i][k][1]*6+b[i][k][0]*2+b[i][k][2]][0];
				z[k][1] = t[j][b[i][k][1]*6+b[i][k][0]*2+b[i][k][2]][1];
				z[k][2] = t[j][b[i][k][1]*6+b[i][k][0]*2+b[i][k][2]][2];
				if (z[k][0] < x) x = z[k][0];
				if (z[k][1] < y) y = z[k][1];
			}
			for(k=0; k<6; k++)
			{
				z[k][0] -= x;
				z[k][1] -= y;
			}
			printf("{");
			for(k=0; k<6; k++)
			{
				printf(" 0x%06X", (z[k][0]<<16)|(z[k][1]<<8)|z[k][2]);
				if (k<5) printf(",");
			}
			printf("}");
			if (j<5) 
				printf(",\n");
			else
				printf("\n\n");
		}
	}
	getchar();
}

2008-10-20 13:57
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
27
大牛~~~
可否透露你的职业、年龄、性别、收入。。。
2008-10-20 14:15
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
28
透露最后一项就够了。。。
旋转的算法没想到。。。也想不到可以这么输出图形。。。膜拜再膜拜。。。
2008-10-20 14:21
0
雪    币: 260
活跃值: (102)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
29
完全看不懂,太复杂了。
2008-10-20 15:08
0
雪    币: 251
活跃值: (25)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
30
学习了,果然是大牛
2008-10-20 15:13
0
雪    币: 7309
活跃值: (3778)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
31
毅力惊人的是shoooo,据说她的硬编码数据有91KB,全是手输的
2008-10-20 15:23
0
雪    币: 8209
活跃值: (4458)
能力值: ( LV15,RANK:2459 )
在线值:
发帖
回帖
粉丝
32
2006注册,只发一贴,然后潜水两年多,现在是一鸣惊人了
2008-10-20 15:28
0
雪    币: 732
活跃值: (192)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
33
晕,看不懂大牛的代码。。。。
2008-10-20 15:33
0
雪    币: 216
活跃值: (26)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
34
那以后要叫shoooo为阿牛哥了,牛人才有那样的毅力啊
2008-10-20 15:36
0
雪    币: 993
活跃值: (442)
能力值: ( LV12,RANK:403 )
在线值:
发帖
回帖
粉丝
35
说来惭愧,当时论坛的要求是必须发过贴的用户才拥有下载附件的权力,
以是就地取材掺和了一个跟贴,好下载各位大牛们提供的好东东。
2008-10-20 15:43
0
雪    币: 233
活跃值: (15)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
36
两年磨练,学成出山啦
2008-10-20 16:05
0
雪    币: 479
活跃值: (25)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
37
[QUOTE=海风月影;523611]毅力惊人的是shoooo,据说的硬编码数据有91KB,全是手输的[/QUOTE]

shoooo大牛是女的吗?
2008-10-20 16:26
0
雪    币: 8209
活跃值: (4458)
能力值: ( LV15,RANK:2459 )
在线值:
发帖
回帖
粉丝
38
海风说是应该就是了
2008-10-20 16:28
0
雪    币: 7309
活跃值: (3778)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
39
LS的LS要快点下手,ccfer已经开始行动了
2008-10-20 17:00
0
雪    币: 503
活跃值: (80)
能力值: (RANK:280 )
在线值:
发帖
回帖
粉丝
40
我说shoooo大牛咋这么强悍呢,传说中的葵花宝典真不一般啊
2008-10-20 17:33
0
雪    币: 2056
活跃值: (13)
能力值: ( LV13,RANK:250 )
在线值:
发帖
回帖
粉丝
41
膜拜本页中的所有ID(从LS开始)。
2008-10-20 17:41
0
雪    币: 101
活跃值: (88)
能力值: ( LV2,RANK:140 )
在线值:
发帖
回帖
粉丝
42
总结一下:
看雪阴盛阳衰,完毕。
2008-10-20 18:00
0
雪    币: 107
活跃值: (1628)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
43
膜拜各位牛人
2008-10-20 18:17
0
雪    币: 231
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qdk
44
这就完了,几天没来就完了??

不是21号中午的么?
2008-10-20 22:35
0
雪    币: 231
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qdk
45
猛人这么多啊
2008-10-20 22:36
0
雪    币: 210
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
46
强大的牛人!!
2008-10-20 23:04
0
雪    币: 249
活跃值: (35)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
47
太帅气了。。。膜拜中
2008-10-21 17:06
0
雪    币: 732
活跃值: (192)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
48
请Loka:
   int t[6][18][3]  这个数组表示什么? 在纸上画了出来,看不出来是什么思路,也不是哪个图形的组合。t[1]、t[4]是一样的,是长条图的三次简单平移又叠加,t[2]、t[5]是一样的,t[3]、t[6]是一样的。

[QUOTE=Loka;523562]代码见下面,有点乱,当时随手写的,没什么讲究。
// test.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
int t[6][18][3] =
{
        {
                { 0, 0, 0 },
                { 0, 0, 1...[/QUOTE]
2008-10-22 11:30
0
雪    币: 993
活跃值: (442)
能力值: ( LV12,RANK:403 )
在线值:
发帖
回帖
粉丝
49
[QUOTE=davidhee;524468]请Loka:
   int t[6][18][3]  这个数组表示什么? 在纸上画了出来,看不出来是什么思路,也不是哪个图形的组合。t[1]、t[2],t[5]只是长条图的三次简单平移又叠加,t[3]、t[6]是一样的,t[5]三个竖菱形平移叠加。[/QUOTE]
呵呵,程序随手写的没加注释。做一下解释:
你把水平方向当X轴,60度方向当Y轴,那么每一个菱形块就对应一个固定的坐标(x,y),而菱形块中的两个三角形就有尖头朝上和朝下的区别,我们把它当成z,这样,每一个三角形就可以用(x,y,z)来唯一确定了。这也是我那两个数组中最后[3]的意思。现在我们看题目中那十二个小块,每个小块均是由6个三角形组成的,你把它们放在画好的坐标图上,就会发现它们的大小不会超过3*3个菱形,这时候我们考虑把它进行旋转和翻转的问题,对坐标图上一个3*3的菱形块进行旋转有6种对应,第一种当然是它本身不动,然后是转60度,120度,180度,240度,300度,相应是翻转后的图案也应该有这6种旋转,这样就是有12种,当然后面要扣除重复的,这时你要做的就是找到原来的3*3菱形块被旋转某个角度或翻转后对应的新坐标,找到这种对应后,你把所有的12块图案按这种对应关系进行一次对应变换就得到新的坐标,因为3*3的菱形中包含18个三角形,固t的第二维是[18],至于第一个的[6],其中因为不旋时的坐标我们已经手工给出,就不需要它的坐标对应关系了,因此我把t[0]做为翻转前后的坐标对应来存放,而t[1]~t[5]则放了旋转60度~300度的五种对应关系,下面的b数组则给出了十二块图案的最原始坐标,具体的变换看一下下面的程序应该很好懂的。罗索一大堆不知道有没有解释清楚
2008-10-22 13:30
0
雪    币: 732
活跃值: (192)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
50
谢谢Loka解释。

似乎明白了,相当于坐标变换。t表要纯手工做出来实在不易。
2008-10-22 14:28
0
游客
登录 | 注册 方可回帖
返回
//