很容易理解:从下向上、从左向右
第一列:三个黑两个白,(例如:黑为经纱,白为纬纱)
第二列:由于飞数是2,这里需要将每个位置都向上移动两个单位
第三列:以此类推,超出的经纬纱从下方补齐即可
代码实现:
#include <iostream>
#include<stdio.h>
using namespace std;
int main()
{
int i,j,N1,N2,f,m;
int c[10],d[10],a[100][100];
printf("please input m:");
scanf("%d",&m);
for(i=0;i<=m-1;i++)
{
printf("please input C[%d]:",i+1);
scanf("%d",&c[i]);
printf("please input D[%d]:",i+1);
scanf("%d",&d[i]);
}
N1=0;
for(i=0;i<=m-1;i++)
{
N1=N1+c[i]+d[i];
}
N2=N1;
printf("please input f:");
scanf("%d",&f);
if(f<0)f=N1+f;
i=1;
for(j=0;j<=m-1;j++)
{
while(c[j]>0)
{
a[N1-i+1][1]=1;
c[j]--;
i++;
}
while(d[j]>0)
{
a[N1-i+1][1]=0;
d[j]--;
i++;
}
}
for(j=2;j<=N2;j++)
{
for(i=1;i<=N1;i++)
{
if((i+f)>N1) a[i][j] = a[i+f-N1][j-1];
else a[i][j]=a[i+f][j-1];
}
}
for(i=1;i<=N1;i++)
{
for(j=1;j<=N2;j++)
{
printf("%5d",a[i][j]);
}
printf("\n");
}
getchar();
return 0;
}
运行效果如下: