您的位置:首页 > 其它

金币阵列问题。有m*n枚金币在桌面上排成一个金币阵列。每一个金币正面朝上,或背面朝上,分别用0和1表示。 金币阵列游戏的规则是:(1)每次可将任一行金币翻过来放在原来的位置上;(2)每

2016-09-04 17:24 771 查看


#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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法
相关文章推荐