矩阵翻硬币Java编程问题标题:矩阵翻硬币小明先把硬币摆成了一个 n 行 m 列的矩阵.随后,小明对每一个硬币分别进行一次 Q 操作.对第x行第y列的硬币进行 Q 操作的定义:将所有第 i*x 行,第 j*y 列的硬币进行翻转.其中i和j为任意使操作可行的正整数,行号和列号都是从1开始.当小明对所有硬币都进行了一次 Q 操作后,他发现了一个奇迹——所有硬币均为正面朝上.小明想知道最开始有多少枚硬币
网友回答
package zhidao;
import java.util.Arrays;
/** * 标题:矩阵翻硬币<br>
*
*
@author Yugi111 */
public class Q
{\x09// 假设0表示反面
\x09// 小明先把硬币摆成了一个 n 行 m 列的矩阵.
\x09int[][] qArray = { { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 } };
\x09/**
\x09 * 随后,小明对“每一个”硬币分别进行 "一次" Q 操作.<br>
\x09 * 对第x行第y列的硬币进行 Q 操作的定义:将所有第 i*x 行,第 j*y 列的硬币进行翻转.
\x09 */
\x09private void qTurn ()
\x09{\x09\x09// 其中i和j为任意使操作可行的正整数 > 0,行号和列号都是从1开始.
\x09\x09for ( int x = 1; x < qArray.length; x++ )
\x09\x09{
\x09\x09\x09for ( int y = 1; y < qArray[x].length; y++ )
\x09\x09\x09{
\x09\x09\x09\x09for ( int i = 1; i < qArray.length / x; i++ )
\x09\x09\x09\x09{\x09\x09\x09\x09\x09for ( int j = 1; j < qArray[x].length / y; j++ )\x09\x09\x09\x09\x09{\x09\x09\x09\x09\x09\x09// 对“每一个”硬币分别进行 "一次" Q 操作\x09\x09\x09\x09\x09\x09qArray[i * x][j * y] = qArray[i * x][j * y] == 0 ? 1 : 0;\x09\x09\x09\x09\x09}\x09\x09\x09\x09}\x09\x09\x09}\x09\x09}\x09}\x09public static void main ( String[] args )\x09{\x09\x09Q q = new Q ();\x09\x09q.qTurn ();\x09\x09for ( int i = 0; i < q.qArray.length; i++ )\x09\x09{
\x09\x09\x09System.out.println (Arrays.toString (q.qArray[i]));\x09\x09}\x09\x09System.out.println (" 当小明对所有硬币都进行了一次 Q 操作后,他发现了一个奇迹——所有硬币均为正面朝上.");