其实是一道简单的题目,耐心的慢慢做就能做出。
没有什么技巧。
#include <iostream>
using namespace std;
struct node
{
int a,b;
int c,d;
};
int main()
{
int m,n;
int i,j,k,l,t,v;
node job[205];
char a[205],b[205]; //a数组用来记录每次的变化,b数组用来存第一列数据
char f[205][205]; //f数组用来存矩阵
while(cin>>m>>n)
{
//输入数据
for(i=0;i<m;i++)
cin>>job[i].a;
for(i=0;i<m;i++)
cin>>job[i].b;
for(i=0;i<n;i++)
cin>>job[i].c;
for(i=0;i<n;i++)
cin>>job[i].d;
k=0;l=0;
for(i=0;i<m;i++) //将第一列数据赋值给定义的两个字符数组
{
for(j=0;j<job[i].a;j++){
a[k++]='1';
b[l++]='1';
}
for(j=0;j<job[i].b;j++){
a[k++]='0';
b[l++]='0';
}
}
int s=0;
v=k-1;
for(t=0;t<k;t++) //将第一列的值赋给f数组
{
f[v--][s]=a[t];
}
s++;
for(i=0;i<n;i++)
{
for(j=0;j<job[i].d;j++) //每一个job[i].c需要做job[i].d次
{
if(job[i].c>0) //判断是向上移动还是向下移动
{
for(t=0;t<job[i].c;t++) //移动job[i].c个字符
{
int temp=a[k-1];
for(v=k-1;v>0;v--) //将数组的值移动
a[v]=a[v-1];
a[0]=temp;
}
}
else
{
int w=-1*job[i].c;
for(t=0;t<w;t++)
{
int temp=a[0];
for(v=0;v<k-1;v++)
a[v]=a[v+1];
a[k-1]=temp;
}
}
v=k-1;
for(t=0;t<k;t++)
{
f[v--][s]=a[t];
}
s++;
}
}
v=k-1;
for(i=0;i<k;i++)
{
if(f[i][s-1]!=b[v])
break;
v--;
}
if(i==k){
for(i=0;i<k;i++)
{
for(j=0;j<s-1;j++)
cout<<f[i][j];
cout<<endl;
}
}
else
cout<<"Can not make beautilful cloth !"<<endl;
}
return 0;
}