动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > C/C++教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ C/C++教程 ]的信息

本月文章推荐
.在CB中使用ACCESS数据库.
.猜拳.
.用汇编写系统服务程序.
.用递归法解决商人渡河问题.
.VC实现系统热键激活后台服务程序.
.C++ 对象与数组.
.C语言程序设计基础讲座之函数.
.Snake.Net中的线性表.
.让C/C++图形程序独立运行.
.C/C++程序员请注意指针的用法.
.C/C++编程新手错误分析(1).
.陀螺.
.Asp组件高级入门与精通系列之二.
.利用中断实现每500毫秒接收一次数.
.ar和nm命令的使用.
.C宏——智者的利刃,愚者的恶梦.
.C++虚函数和动态联编技术分析.
.C/C++中利用空指针(NULL),提高程.
.关于 MD5 的一些知识.
.I/O端口读写的实现.

数学与程序 一道游戏题目的快速解法

发表日期:2008-3-8 |


  题目:   有十个开关等间距排成一线,每个开关对应其上方的一盏灯(十盏灯也排成一线)。每按动一下开关,可以使对应的灯改变状态(原来亮着的将熄灭,原来熄灭的将被点亮)。
  但是,由于开关之间的距离很小,每次按动开关时,相邻的一个开关也将被按动。例如:按动第5个开关,则实际上第4、5、6个开关都被按动。而按动靠边的第1个开关时,第1、2个开关都被按动。并且,无法只按动最靠边的一个开关。   现在给出十盏灯的初始的状态和目标状态,要求计算:从初始状态改变到目标状态所需要的最少操作次数。   函数接口:   int MinChange(const int Start[],const int End[]);   其中:Start表示了初始状态,End表示了目标状态。表示状态的数组(Start和End)中,若某元素为0表示对应的灯亮着,否则表示对应的灯没有亮。调用函数时保证Start和End数组长度均为10,并保证有解。   看了很多人的解法都是用循环遍历来判定是否达到最后要求,但是假如和线形代数结合的话,就有一种很快速的解法。   约定:以下所用的‘+’号都是‘异或’的运算。   先简化一下,假设有四个灯,初始状态s0~s3,目标状态是e0~e3,转换一次状态就是和1进行异或运算一次,所以状态转移矩阵为:   (s0,s1,s2,s3)+k0*(1,1,0,0)+k1*(1,1,1,0)+k2*(0,1,1,1)+k3*(0,0,1,1)=(e0,e1,e2,e3);   其中k(n)表示第n个开关所翻动的次数。并且,注重异或运算中a+b+b=a,所以,某个开关翻动偶数次的效果相当于没有翻动,翻动奇数次的效果相当于翻动一次;又由于异或运算满足交换律,所以翻动的顺序没有影响。综上每个开关翻动的次数只有1次或0次就足够了。   设m(n)=s(n)+e(n),注重异或运算中的'-'也就是'+',所以解线性方程组:   k0+k1 =m1;   k0+k1+k2 =m2;   k1+k2+k3=m3;   k2+k3=m4;   假设解存在,就可以算出通解(k0,k1,k2,k3),再统计出通解中1的个数,就是所需要翻动的次数了。并且还可以知道哪些开关需要拨动,比如算出解是(1,0,1,0)就是第0和2个开关需要拨动一次。   因此针对本题目的10个灯泡,本人已算出这10元线性方程组的通解:   k0=m0+m2+m3+m5+m6+m8+m9;   k1=m2+m3+m5+m6+m8+m9;   k2=m0+m1;   k3=m3+m0+m1+m5+m6+m8+m9;   k4=m5+m6+m8+m9;   k5=m4+m3+m0+m1;   k6=m6+m4+m3+m0+m1+m8+m9;   k7=m8+m9;   k8=m7+m6+m4+m3+m0+m1;   k9=m9+m7+m6+m4+m3+m0+m1;   和上面一样,m(n)为开始状态与目标状态的每位异或。至于是否存在解,本人已将次系数矩阵化简为对角矩阵,可以看到系数矩阵的秩(Rank)与未知数的个数相等,所以无论是任何的输入和输出变换都能找到唯一解。   本人程序如下:   int MinChange(const int Start[],const int End[]){   int m[10];   int k[10];   int res=0;   int i,j,n;   for(i=0;i<10;i++){   m[i]=Start[i]^End[i]; /* m[]=Start[] XOR End[] */   }   /* calculate roots */   k[0]=m[0]^m[2]^m[3]^m[5]^m[6]^m[8]^m[9];   k[1]=m[2]^m[3]^m[5]^m[6]^m[8]^m[9];   k[2]=m[0]^m[1];   k[3]=m[3]^m[0]^m[1]^m[5]^m[6]^m[8]^m[9];   k[4]=m[5]^m[6]^m[8]^m[9];   k[5]=m[4]^m[3]^m[0]^m[1];   k[6]=m[6]^m[4]^m[3]^m[0]^m[1]^m[8]^m[9];   k[7]=m[8]^m[9];   k[8]=m[7]^m[6]^m[4]^m[3]^m[0]^m[1];   k[9]=m[9]^m[7]^m[6]^m[4]^m[3]^m[0]^m[1];   /* count for switch times */   for(j=0;j<10;j++){   if(k[j]) res++;   }   /* display k(n); */   for(n=0;n<10;n++) printf("%d,",k[n]);   return res;   }   测试主程序:
  main(){   int A[10]={1,1,1,0,0,1,0,1,1,0};   int B[10]={0,0,1,1,0,0,1,1,1,1};   int C;   C=MinChange(A,B);   printf("**%d**",C);   }   显示结果为:   1,0,0,0,1,1,1,1,0,1,**6**   就是假如要把状态A转为状态B,需要把第0,4,5,6,7,9号开关翻动一次,共6次。   测试验证结果正确:)   当然,此做法也有一个缺点,就是当灯的个数改变时,就要重新设定线形方程组的特解形式。 更多文章 更多内容请看网络游戏攻略  游戏开发专题,或
上一篇:自己对三层架构理论的理解 人气:448
下一篇:用AVIFile函数制做AVI文件基本步骤 人气:720
浏览全部C/C++的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-9-4 LPLY CMS 网站管理系统 v5.0
2008-9-4 缤纷互动视频交友 v3.01.902
2008-9-4 ADN视频收藏专家 v3.0 bulid 080
2008-9-4 天空网络电影系统SKYUC v2.5.6 简
2008-9-4 Web Wiz Rich Text Editor(文本编
2008-9-4 幻影动漫网视频系统(Ppdong) v1.
2008-9-4 乐维电脑在线DIY配置系统
2008-9-4 老樊文章管理系统SQL版
2008-9-4 ASP.NET 2.53 缩略图水印组件源码
2008-8-23 Mini WinMount V0.4
2008-8-23 Vista优化大师3.11正式版
2008-8-23 Wine 1.13
2008-8-23 KlipFolio 5.0 Build 5899-80
2008-8-23 Windows Sysinternals Desktops
2008-8-23 OneTap Movies1.2破解版
2008-8-23 AnnotaterPDF阅读1.1.503 破解版
2008-8-23 SoundMeter分贝测量仪 v1.0汉化破
2008-8-23 iDrum音乐节拍1.0破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | Html转换js | js/vbs加密 | md5加密 | 进制转换
实用工具:汉字翻译拼音 | 符号对照表 | 个税计算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵