TheBlocksProblem(嘻嘻其实难到我想哭,太费脑子了)-创新互联

  1. The Blocks Problem
    题目在这里插入图片描述题意:初始时从左到右有 n个木块,编号为 0.... n − 1 0....n−1 0....n−1,要求实现下列四种操作:
    move a onto b : 把 a 和 b上方的木块归位,然后把 a 放到 b 上面。
    move a over b : 把 a 上方的木块归位,然后把 a 放在 b 所在木块堆的最上方。
    pile a onto b : 把 b 上方的木块归位,然后把 a 及以上的木块坨到 b 上面。
    pile a over b : 把 a 及以上的木块坨到 b 的上面。
    归位就是放回原来的位置
    一组数据的结束标志为 quit,如果有非法指令(如 a 与 b 在同一堆),无需处理。
    输出:所有操作输入完毕后,从左到右,从下到上输出每个位置的木块编号。
    在这里插入图片描述
  • 每个木块堆高度不定,可以使用C++STL里的不定长数组vector。
  • n个木块代表n个vector,n不超过25,所以vector大小也不超过25。
#include
#includeusing namespace std;
#includevectorblock[30];
int n;

//初始化
void init()
{cin >>n;
	for (int i = 0; i< n; i++)
	{block[i].push_back(i);//一开始木块的位置都是在原位
	}
}
//输出下标和高度
void location(int x,int &p,int &h)
{for (int i = 0; i< x; i++)
	{for (int j = 0; j< block[i].size(); j++)
		{	p = i;//在第几个木堆
			h = j;//所在的这个木堆有多高
		}
	}
}

//归位
void goback(int p,int h)//p位>h之上全部归位
{for (int i = h + 1; i< block[p].size(); i++)
	{int k = block[p][i];//
		block[k].push_back(k);
	}
	block[p].resize(h + 1);//重置大小  0-h
}

//移动
void move(int ap, int ah, int bp)
{for (int i = ah ; iint k = block[ap][i];
		block[bp].push_back(k);
	}
	block[ap].resize(ah);
}

void solve()
{int a, b;
	string s1, s2;
	while (cin >>s1)
	{if (s1 == "quit")
		{	break;//退出while语句
		}
		else
		{	cin >>a >>s2 >>b;
			int ap = 0, ah = 0, bp = 0, bh = 0;//p是堆号,h是高度
			location(a, ap, ah);
			location(b, bp, bh);
			if (ap == bp)
			{		continue;
			}
			if (s1 == "move")//a归位
			{		goback(ap, ah);
			}
			if (s2 == "onto")
			{		goback(bp, bh);
			}
			move(ap, ah, bp);
		}
	}
}
void print()
{for (int i = 0;icout<< i<< ":";
		for (int j = 0; j< block[i].size(); j++)
		{	cout<< block[i][j]<< " ";
		}
		cout<< endl;
	}
}

int main()
{init();
	solve();
	print();

	return 0;

}

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧

专注于为中小企业提供成都网站建设、成都网站设计服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业内丘免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了超过千家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
文章题目:TheBlocksProblem(嘻嘻其实难到我想哭,太费脑子了)-创新互联
标题链接:http://ybzwz.com/article/dgoddh.html