金币阵列问题

算法(C++)金币阵列问题 题目描述 有m × n(m ≤ 100 ,n ≤ 100) 个金币在桌面上排成一个m 行n 列的金币阵列。每一枚金币或正面朝上或背面朝上。用数字表示金币状态,0 表示金币正面朝上,1 表示背面朝上。 金币阵列游戏的规则是: (1)每次可将任一行金币翻过来放在原来的位置上; (2)每次可任选2 列,交换这2 列金币的位置。 编程任务 给定金币阵列的初始状态和目标状态,编程计算按金币游戏规则,将金币阵... 阅读详情

金币阵列问题

有m*n枚金币在桌面上排成一个金币阵列。
每一个金币正面朝上,或背面朝上,分别用0和1表示。
金币阵列游戏的规则是:
(1)每次可将任一行金币翻过来放在原来的位置上;
(2)每次可任选2列,交换这2列金币的位置。
给定金币的初始状态和目标状态,计算按金币游戏规则,将金币阵列从初始状态变换到目标状态所需的最少变换次数。
这里写图片描述

#include <stdio.h>

int main()
{
    int i,j,k,h,count,flag=1,temp;
    int a[4][3]={{1,0,1},{0,0,0},{1,1,0},{1,0,1}};//初始矩阵
    int b[4][3]={{1,0,1},{1,1,1},{0,1,1},{1,0,1}};//目标矩阵
//  int a[4][3]={{1,0,1},{0,0,0},{1,0,0},{1,1,1}};//初始矩阵
//  int b[4][3]={{1,1,0},{1,1,1},{0,1,1},{1,0,1}};//目标矩阵
    int c[4][3];//副矩阵

    for(i=0;i<3;i++)//i控制列
    {
        count=0;
        if(i>0)//交换两列
        {
            for(k=0;k<4;k++)//第i列与第0列交换
            {
                temp=b[k][0];
                b[k][0]=b[k][i];
                b[k][i]=temp;
            }
            count++;
        }
        else
        {
            for(j=0;j<4;j++)//第0列匹配完成
            {
                if(a[j][0]!=c[j][0])
                {
                    for(k=0;k<3;k++)
                    {
                        b[j][k]++;
                        if(b[j][k]==2)
                            b[j][k]=0;
                    }
                    count++;
                }
            }
        }

        if(i>0){
            for(j=i;j<3;j++)//1-n列   到此为止,前i-1列匹配完成
            {
                for(k=0;k<4;k++)//k控制行数
                {
                    if(a[k][i]!=b[k][j])
                    {
                         if(i==2 && j==2)
                            flag=0;
                         break;
                    }
                    else if(k==3)//k走完,j走完,交换i列与j列 && j==2
                    {
                        for(h=0;h<4;h++)
                        {
                            temp=b[h][j];
                            b[h][j]=b[h][i];
                            b[h][i]=temp;
                        }
                        count++;
                    }
                }
            }
        }
    }
    if(flag)
        printf("最少需要:%d次\n",count);
    else
        printf("无法完成。\n");

    return 0;
}
/*
思路:
    因为要求最少变换次数,所以行变换只能变换一次,因此剩下的都是列变换。
    a. 第i列与第0列交换,与目标矩阵的第0列匹配(进行行变换),然后依次匹配剩下的列。
    b. 如果匹配成功,则交换,继续匹配剩下的列。
    c. 如果匹配失败,让第i+1列与第0列交换,在重新进行 a => b => c。
*/
c语言:金币阵列的问题 本文介绍了关于c语言:金币阵列的问题,需要的朋友可以参考一下 立即下载

相关推荐

C语言金币阵列问题解决方法

主要介绍了C语言金币阵列问题解决方法,主要涉及数组的灵活运算,是一类非常经典的算法,需要的朋友可以参考下

金币列阵问题

问题描述:有m*n枚金币在桌面上排列成一个m行n列的金币阵列。每一枚金币或正面朝上,或背面朝上。用数字表示金币状态,0表示正面朝上,1表示背面朝上。金币阵列游戏的规则是:    (1)每次将任一行金币翻过来放在原来的位置上。    (2)每次可以任选2列,交换这2列金币的位置。    任务:给定金币的初始状态和目标状态,编程计算按金币游戏规则,将金币排列从初始状态变换到目标状态所需的最少变换次数。...

for you的博客 708

《计算机科学概论(第13版)》5-12章

定序是按给定语句的顺序应用每个算法步骤。(primitive):建立一组定义明确的构建块,利用它们来构造和执行算法的表示。可以消除歧义,不会引起误解,就像咱们传统的自然语言(用英语来沟通交流)。(programming language):原语的集合以及说明如何组合这些原语来表示比较复杂的想法的规则集合。用程序设计语言描述的算法可以在计算机上执行。每个原语都有自己的语法和语义,语法指的是原语的符号表示,语义是指该原语的含义。伪代码:用户开发过程中非正式表达想法的符号系统。

输入知识,消化知识,输出知识,分享知识,教人让我学习更好,业精于勤荒于嬉,行成于思毁于随 1036

HNU_算法_实验1(2021级)-算法实验2-金币阵列问题

金币阵列问题;

蟑螂恶霸的博客 780

告别轮询!手把手教你用S32K3的FlexCAN Enhanced FIFO+DMA实现高效CAN FD数据接收

本文详细介绍了如何利用S32K3芯片的FlexCAN Enhanced FIFO与DMA组合方案,实现高效CAN FD数据接收,彻底告别传统轮询和中断模式。通过深度缓冲、智能过滤和DMA联动技术,该方案在5Mbps高负载场景下将CPU占用率从42%降至3%以下,显著提升系统实时性和吞吐量。

weixin_30906185的博客 503

Halcon实战:如何快速找到图像中的多个圆并计算圆心距离(附完整代码)

本文详细介绍了Halcon在工业视觉检测中快速定位图像中的多个圆并计算圆心间距离的实战方法。通过两种核心算法(阈值分割和动态阈值)的对比分析,结合完整代码示例和参数调优技巧,帮助开发者高效解决多圆检测问题,提升工业检测精度与效率。

weixin_33701251的博客 316

经典算法 金币阵列问题

以下的m 行是金币阵列的初始状态,每行有n 个数字表示该行金币的状态,0 表示金币正面朝上,1 表示背面朝上。接着的m 行是金币阵列的目标状态。如果交换某一列,那一列本来就和目标不一致,我就可以直接选择这一列,反正这一列也本来就要换,说不定我把我这一列换过去,那一列还刚好吻合了。这样第一列就这么确定了,第一列我们一行一行地看,如果每一行的第一个金币和目标金币状态不同,我们给这一整行翻转。如果我交换某一列,使得那一列原来和目标一致变得不一致的,我就不会选择它,因为我没必要破坏它,宁愿选择其他的。

wuqingshun314159的博客 891

05、CAN 总线拓扑结构详解,线型拓扑搭建要点

CAN总线拓扑与信号完整性优化 本文通过工程实践经验,深入剖析了CAN总线系统中信号完整性的关键要素。主要内容包括: 终端电阻的核心作用:必须严格在总线两端配置120Ω电阻,形成60Ω等效阻抗以匹配双绞线特性阻抗,避免信号反射导致的波形畸变。 阻抗匹配原理:解释了信号能量管理机制,指出阻抗不连续会导致信号反射,并通过示波器波形特征(如振铃现象)判断阻抗失配问题。 信号完整性多维要求:强调信号质量不仅涉及波形存在与否,还包括边沿斜率、共模电压范围等关键参数,这些直接影响通信可靠性。 工程实践建议:提供了终端电

2401_88858637的博客 178

搜索 金币阵列问题

金币阵列问题 问题描述: 有m x n (m<=100, n<=100 ) 个金币在桌面上排成一个m行n 列的金币阵列。每一枚金币或正面朝上或背面朝上。用数字表示金币状态,0表示金币正面朝上,1 表示背面朝上。金币阵列游戏的规则是: 每次可将任一行金币翻过来放在原来的位置上; 每次可任选2 列,交换这2 列金币的位置。 算法设计: 给定金币阵列的初始状态和目标状态,计算按金...

motongxue的博客 4134

YOLOv8改进系列:RepVGG重参数化结构——训练多分支,推理单路,极致提速

本文将详细介绍如何将RepVGG的重参数化思想融入到YOLOv8的骨干网络中,实现一种训练时多分支、推理时单路的改进版YOLOv8。我们将提供完整的代码实现、详细的原理讲解,并在COCO数据集和自定义数据集上进行充分的实验验证。

YOLO 200

Open3D 曲率下采样

曲率下采样是一种基于几何特征的点云处理技术,通过计算每个点的曲率来判断其所在位置的局部表面特征,从而进行选择性保留。曲率的计算通常基于点的法向量和其邻域点的分布。

纵马踏花向自由 841

南邮 OJ 1204 金币阵列问题

金币阵列问题 时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte 总提交 : 52            测试通过 : 22  比赛描述   有m×n(m100,n100)个金币在桌面上排成一个m行n 列的金币阵列。每一枚金币或正面朝上或背面朝上。用数字表示金币状态,0表示金币正面朝上,1 表示背面朝上。金币阵

呈凹的博客 846

AutoSAR系列讲解 - 总目录

博主想在开始前先讲一下我们的具体安排,这里就以目录加说明的形式展示出来,同时这也可以作为大家学习AutoSAR的参考。由于实践篇需要在很久以后才会更新,所以这里我们先罗列一下理论篇的内容,实践篇等开始更新的时候我再补充上

雪云飞星的博客 49万+

【算法课】金币阵列问题

金币阵列问题 【题意】 给出01矩阵,请问是否能通过两个操作使得 原01矩阵变换到目标的01矩阵 操作1:行变换 —— 01翻转 操作2:列变换 —— 交换两列 【考察】 模拟题 【题解】 按顺序模拟即可, 第一步:必须找到某一列作为第一列,通过 0 次或多次的行变换变成与目标矩阵的第一列一样。 第二步:通过交换列,得到与目标矩阵一样的。 注意...

weixin_30835923的博客 711

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

金币问题c语言程序,C语言金币阵列问题解决方法

本文实例详细讲述了C语言实现金币阵列问题的解决方法,分享给大家供大家参考。具体方法如下:问题描述:有m*n(1 ≤ m, n ≤ 100)个金币在桌面上排成一个 m 行 n 列的阵列。每一枚金币或正面朝上或背面朝上。用数字表示金币状态,0表示金币正面朝上,1 表示背面朝上。金币阵列游戏的规则是:1. 每次可将任一行金币翻过来放在原来的位置上;2. 每次可任选 2 列,交换这 2 列金币的位置。本题...

weixin_39994296的博客 590

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

上一篇: 最优分解问题
下一篇: 众数问题
烂笔头NI
博客等级 码龄9年 7粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值