金币阵列问题。有m*n枚金币在桌面上排成一个金币阵列。每一个金币正面朝上,或背面朝上,分别用0和1表示。 金币阵列游戏的规则是:(1)每次可将任一行金币翻过来放在原来的位置上;(2)每
#include <stdio.h> #include <math.h> #define MAX 10 int main() { int num, change; int m, n, score = 0; int a[MAX][MAX] = { 0 }; int b[MAX][MAX] = { 0 }; int c[MAX] = { 0 }; int lienum = 0; printf( "输入要输入的数据组数:\n" ); scanf( "%d", &num ); for ( num; num > 0; num-- ) { change = 0; printf( "输入行数&列数:\n" ); scanf( "%d %d", &m, &n ); for ( int i = 1; i <= m; i++ ) for ( int j = 1; j <= n; j++ ) { scanf( "%d", &a[i][j] ); } printf( "输入目标矩阵:\n" ); for ( int i = 1; i <= m; i++ ) for ( int j = 1; j <= n; j++ ) { scanf( "%d", &b[i][j] ); } for ( int i = 1; i <= m; i++ ) for ( int j = 1; j <= n; j++ ) { if ( a[i][j] == b[i][j] ) { score++; }else { c[lienum] = j; /* 记住不相同列 */ lienum++; if ( lienum == n ) /*同一行所有列不同进行翻转 */ { for ( int q = 1; q <= n; q++ ) { b[i][q] = abs( b[i][q] - 1 ); } change++; printf( "所在行:%d 反转结果:%d\n", i, b[i][1] ); printf( "同一行所有列不同进行翻转一次%d\n", change ); } if ( lienum == 2 ) /*有两列不同交换两列 */ { int swap = b[i][c[0]]; b[i][c[0]] = b[i][c[1]]; b[i][c[1]] = swap; change++; printf( "同一行偶数列不同进行翻转一次%d\n", change ); printf( "交换了i:%d a:%db:%d\n", i, b[i][c[0]], b[i][c[1]] ); } } } if ( change == 0 ) printf( "无法完成交换 -1" ); else printf( "交换了:%d次\n", change ); } return(0); }
格式使用的在线代码美化器 http://web.chacuo.net/formatc
不为失败找原因,要为成功找方法!