找回密码
 注册会员
查看: 1464|回复: 0

黑白棋算法 哪错了??

[复制链接]
发表于 2010-10-18 13:40:57 | 显示全部楼层 |阅读模式
<p>黑白棋算法 哪错了??</p>
<p><img src="http://img.baidu.com/img/iknow/icn_point.gif"> 悬赏分:0 -</p>
<p>解决时间:2010-10-18 13:40</p>
<p>#include <stdio.h></p>
<p>#include <stdlib.h></p>
<p>int t[ 100 ] , s , w ;</p>
<p>void check( char * a ){</p>
<p>int flag = 0 , f = 0  ;</p>
<p>int i = 0 , j = 0 ;</p>
<p>for( i = 0 ; i < 8 ; i++ )</p>
<p>{</p>
<p>if( a[ i ] == \'B\' && a[ i + 1 ] == \'W\' && a[ i + 2 ] == \'B\' )</p>
<p>{</p>
<p>flag = 1 ;</p>
<p>f = 1 ;</p>
<p>a[ i ] = \'W\' ;</p>
<p>a[ i + 1 ] = \'B\' ;</p>
<p>a[ i + 2 ] = \'W\' ;</p>
<p>check( a ) ;</p>
<p>}</p>
<p>if( f == 1 )</p>
<p>{</p>
<p>a[ i ] = \'B\' ;</p>
<p>a[ i + 1 ] = \'W\' ;</p>
<p>a[ i + 2 ] = \'B\' ;</p>
<p>f = 0 ;</p>
<p>}</p>
<p>}</p>
<p>if(flag == 0)</p>
<p>{</p>
<p>s++ ;</p>
<p>for( i = 0 ; i < 10 ; i++ )</p>
<p>{</p>
<p>if( a[ i ] == \'B\' )</p>
<p>t[ s ]++ ;</p>
<p>}</p>
<p>if( t[ s ] < t[ s - 1 ] )</p>
<p>w = t[ s ] ;</p>
<p>else</p>
<p>w = t[ s - 1 ] ;</p>
<p>}</p>
<p>}</p>
<p>int main()</p>
<p>{</p>
<p>int m , i ;</p>
<p>char a[ 13 ] ;</p>
<p>scanf("%d",&m) ;</p>
<p>getchar();</p>
<p>while( m-- )</p>
<p>{</p>
<p>int k ;</p>
<p>t[ 0 ] = 11 ;</p>
<p>for( k = 1 ; k < 100 ; k++ )</p>
<p>{</p>
<p>t[ k ] = 0 ;</p>
<p>}</p>
<p>s = 0 ;</p>
<p>for( i = 0 ; i < 11 ; i++ )</p>
<p>{</p>
<p>scanf("%c",&a[ i ]) ;</p>
<p>}</p>
<p>check( a ) ;</p>
<p>printf("%d\n",w) ;</p>
<p>}</p>
<p>return 0;</p>
<p>}</p>
<p>原题:在一条直线棋盘上,有10个格子,每个格子放置一颗黑白棋,我们用大写字母“W”表示白色朝上的棋子,用大写字母“B”表示黑色朝上的棋子。初始状态,每个格子都放置一颗棋子,规定:如果有连续三颗棋子颜色分别为“黑白黑”,那么你可以将三颗棋子同时反面,即变成“白黑白”。现在问,在给定的初始状态下,经过一系列翻转,黑棋数目最少可以达到多少?</p>
<p>输入</p>
<p>第一行一个整数t,表示有t组数据</p>
<p>以下每行有一个长度为10的,由大写字母“W”“B”组成的字符串,即初始状态</p>
<p>伪代码: char a[11]; 用于存储当前的颜色字符串</p>
<p>void check(){</p>
<p>flag=0;</p>
<p>for(按顺序搜索当前 颜色字符串)发现黑白黑,则{</p>
<p>flag=1;</p>
<p>转换 黑白黑 为 白黑白;// 修改a[]中某几个字符值</p>
<p>check(); // 递归检查新字符串</p>
<p>恢复为转换前字符串,即转换此处 白黑白 为 黑白黑,继续for的搜索;</p>
<p>}</p>
<p>if(flag==0){</p>
<p>说明当前字符串已经不能再转换,数一下有几个黑棋子,修改最小值;</p>
<p>}</p>
<p>}</p>
<p>为什么我就是过不了!!??</p>
<p>提问者: p_nxet - 三级</p>
<p>最佳答案</p>
<p>大致看了一下,你确定这个题目只要循环100次就够了?t数组会不会有溢出的可能?</p>
<p>我不知你设置t[100]的目的是什么,但我觉得只要保存最小值就够了,似乎没必要设一个数组。</p>
<p>另外,f是多余的,可以改成这样:</p>
<p>{</p>
<p>flag = 1 ;</p>
<p>a[ i ] = \'W\' ;</p>
<p>a[ i + 1 ] = \'B\' ;</p>
<p>a[ i + 2 ] = \'W\' ;</p>
<p>check( a ) ;</p>
<p>a[ i ] = \'B\' ;</p>
<p>a[ i + 1 ] = \'W\' ;</p>
<p>a[ i + 2 ] = \'B\' ;</p>
<p>}</p>
<p>0</p>
<p>回答者:</p>
<p>bsod - 六级   2010-10-18 12:07</p>
<p>我来评论>></p>
<p>提问者对于答案的评价:</p>
<p>谢谢您 !!!</p>
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|文字版|手机版|小黑屋|襄阳城

GMT+8, 2025-6-24 04:10

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表