一道题
  • 板块题目总版
  • 楼主xzz_0611
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/12/16 16:06
  • 上次更新2023/12/16 17:38:04
查看原帖
一道题
1005749
xzz_0611楼主2023/12/16 16:06

题目:

制作一个华容道(n*n)
参考程序:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	srand(time(0));
	int num,arr[11][11],k=1,x,y,xSpace,ySpace,cmp,ans=0;
	bool flag,flag2[150]={false};
	flag2[0]=true;
	cin>>num;
	for(int i=1;i<=num;i++)
		for(int j=1;j<=num;j++)
		{
			if(i!=num||j!=num)
			{
				do
				{
					cmp=rand()%(num*num);
				}while(flag2[cmp]);
				flag2[cmp]=true;
				arr[i][j]=cmp;
			}
		}
	arr[num][num]=NULL;
	xSpace=num;
	ySpace=num;
	for(int i=1;i<=num;i++)
	{
		for(int j=1;j<=num;j++)
		{
			if(xSpace==i&&ySpace==j) cout<<setw(3)<<" ";
			else cout<<setw(3)<<arr[i][j];
		}
		cout<<endl;
	}
	while(true)
	{
		do
		{
			cin>>x>>y;
		}while(x!=xSpace&&ySpace!=y);
		if(xSpace==x)
		{
			if(y<ySpace) for(int i=ySpace-1;i>=y;i--) arr[x][i+1]=arr[x][i];
			else for(int i=ySpace+1;i<=y;i++) arr[x][i-1]=arr[x][i];
		}
		else
		{
			if(x<xSpace) for(int i=xSpace-1;i>=x;i--) arr[i+1][y]=arr[i][y];
			else for(int i=xSpace+1;i<=x;i++) arr[i-1][y]=arr[i][y];
		}
		arr[x][y]=NULL;
		xSpace=x;
		ySpace=y;
		k=1;
		flag=true;
		for(int i=1;i<=num;i++) for(int j=1;j<=num;j++) if(arr[i][j]!=k++&&j!=num&&i!=num) flag=false;
		ans++;
		if(flag)
		{
			cout<<"YOU WIN :"<<ans;
			return 0;
		}
		for(int i=1;i<=num;i++)
		{
			for(int j=1;j<=num;j++)
			{
				if(xSpace==i&&ySpace==j) cout<<setw(3)<<" ";
				else cout<<setw(3)<<arr[i][j];
			}
			cout<<endl;
		}
	}
    return 0;
}
2023/12/16 16:06
加载中...