题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4671
水题不多说 记录代码
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int a[101][101];
bool vis[101];
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
memset(vis,false,sizeof(vis));
for(int i=0;i<m;i++)
a[i][0]=i%n+1;
for(int j=0;j<m;j++)
{
int M=n;
if(vis[j]==false)
{
vis[j]=true;
if(a[j][0]!=M) a[j][1]=M;
else {M--; a[j][1]=M;}
M--;
for(int k=j+1;k<m;k++)
{
if(a[k][0]==a[j][0])
{
vis[k]=true;
if(M==0) M=n;
if(a[k][0]!=M) a[k][1]=M;
else {M--;if(!M) M=n; a[k][1]=M;}
M--;
}
}
}
}
for(int i=0;i<m;i++)
{
int k=1;
for(int j=2;j<n;j++)
{
while(a[i][0]==k||a[i][1]==k) k++;
a[i][j]=k;
k++;
}
}
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
printf("%d ",a[i][j]);
printf("\n");
}
}
}