https://www.cnblogs.com/violet-acmer/p/9739115.html
题意:
能否通过横着排或竖着排将 1x p 的小姐姐填满 n x m 的区域内。
题解:
只有当 n*m%p == 0 时才有可能填满,又注意到 p 为质数,故如果 n*m%p == 0, 则 n,m只少有一个是 p 的整倍数。
分两种情况:
(1)n*m%p != 0 ,输出 No。
(2)n*m%p == 0
①如果 n%p == 0,可以将 n 分成 n/p 块,然后一块一块填。
②反之,将 m 分成 m/p 块,然后一块一块填。
注意输出格式。
AC代码:
#include<iostream>
#include<cstdio>
using namespace std; int main()
{
int n,m,p;
scanf("%d%d%d",&n,&m,&p);
if(n*m%p != )
{
printf("No\n");
return ;
}
int res[][];
int peo=;
if(n%p == )
{
for(int i=;i <= m;++i)
{
for(int j=;j <= n;++j)
{
res[j][i]=peo;
if(j%p == )
peo++;
}
}
}
else
{
for(int i=;i <= n;++i)
{
for(int j=;j <= m;++j)
{
res[i][j]=peo;
if(j%p == )
peo++;
}
}
}
printf("Yes\n");
for(int i=;i <= n;++i)
{
for(int j=;j <= m;++j)
{
if(j != )
cout<<' ';
cout<<res[i][j];
}
cout<<endl;
}
}