题目
文章目录
思路:AC代码:收获:
思路:
若有错误的地方请指正。若读者不理解,欢迎提问
1 如果k%n==0 ,那么每一行,每一列都有k个1就行,直接错开讲数组置1 2 如果r=k%n,r!=0,先进行操作1。再在前r行,每一行,错开放置一个1
AC代码:
#include <bits/stdc++.h>
using namespace std
;
const int maxn
= 300+9;
int main()
{
int t
;
cin
>>t
;
while(t
--)
{
int n
,k
;
int ans
= 0;
cin
>>n
>>k
;
int maxR
= k
/n
;
int maxC
= 0;
maxC
= maxR
;
int r
= k
%n
;
if(r
) ans
= 2;
else ans
= 0;
int R
[maxn
];
int C
[maxn
];
int a
[maxn
][maxn
];
cout
<<ans
<<endl
;
memset(R
,0,sizeof(R
));
memset(C
,0,sizeof(C
));
memset(a
,0,sizeof(a
));
int t
= 0;
for(int i
=0;i
<n
;i
++)
{
for(int j
=0;j
<n
;j
++)
{
if(R
[i
]<maxR
&&C
[(j
+t
)%n
]<maxC
)
{
a
[i
][(j
+t
)%n
] = 1;
R
[i
]++;
C
[(j
+t
)%n
]++;
}
}
t
++;
}
if(r
)
{
t
= 0;
for(int i
=0;i
<n
;i
++)
{
for(int j
=0;j
<n
;j
++)
{
if(a
[i
][(j
+t
)%n
]==0&&r
)
{
a
[i
][(j
+t
)%n
] = 1;
r
--;
break;
}
}
t
++;
}
}
for(int i
=0;i
<n
;i
++)
{
for(int j
=0;j
<n
;j
++)
{
printf("%d",a
[i
][j
]);
}
printf("\n");
}
}
return 0;
}
收获:
如何给 矩阵错赋值