配料员

 

25. 配料员

成绩: 10 / 折扣: 0.8

背景

你是一名室内装潢工程队的配料员。你的伙伴们在铺大理石地砖的时候,习惯于按照以下两种之字形的遍历顺序之一:


学了 C 语言以后,你决定编写一个程序。无论你的伙伴们想要以何种遍历顺序铺设任何图案的任何大小的地砖方阵,你的程序都能正确地生成一个线性遍历序列,指示你每次该递给他们什么图案的地砖。

输入

首行为需要遍历的地砖矩阵的个数。第二行为第一个矩阵的维数(其中的 x 是小写字母 x,前后各有一个空格)。如果是一个 N 维的矩阵,则接下来的 N 行每一行为矩阵该行各列的元素,整型,以空格分隔,每一个整数代表一种基本图案的地砖。随后的一行为该矩阵遍历的模式,只能为 TL-BR 或者 TR-BL 两者之一。若有多个矩阵,则从下一行起重复上述的输入模式。

输出

按顺序输出所需原料的编号。

#include<stdio.h>
#include<string.h>

int floor[100][100];
int m,n,x,y,count;

void left();
void right();
void change();

void main()
{	char s[6];
	int i,j,k,num;

	scanf("%d",&num);
	for(i=0;i<num;i++)
	{ scanf("%d x %d",&m,&n);
	  for(j=0;j<m;j++)
		for(k=0;k<n;k++)
	        scanf("%d",&floor[j][k]);
	  getchar();
	  gets(s);
   	  if(!strcmp(s,"TR-BL"))
			change();
	  x=0;y=0;
	  count=0;
   	  
	  {	while(x<m-1||y<n-1)
		{ 
		 right();
			count++;
			if(x>=m-1&&y>=n-1)
				break;
		 left();
			count++;
		}	
		printf("%d\n",floor[m-1][n-1]);
	  }
	}
	return ;
}

void change()
{	int i,j,c;
	for(i=0;i<m;i++)
	   for(j=0;j<n/2;j++)
	   {	c=floor[i][j];
			floor[i][j]=floor[i][n-1-j];
			floor[i][n-1-j]=c;
		}
	return ;
}

void right()
{	while(x+y==count)
	{ 
		  printf("%d,",floor[x][y]);
		  if(x==0||y==n-1)
		  {	if(x!=0&&y==n-1)
			{	x++;
				break;
			}
			if(x==0&&y==n-1)
			{	x++;
				break;
			}
			 if(x==0)
			 {	y++;
				break;
			 }
			if(y==n-1)
				x++;
			  break;
		  }
		  x--;
		  y++;
	}
	return ;
}

void left()
{	while(x+y==count)
	{ 
			printf("%d,",floor[x][y]);
			if(y==0||x==m-1)
			{	if(x==m-1&&y!=0)
				{	y++;
					break;
				}
				if(x==m-1&&y==0)
				{	y++;
					break;
				}
				if(y==0)
				{	x++;
					break;
				}
				if(x==m-1)
				y++;
				break;
			}
			x++;
			y--;
	}	
	return ;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值