MS燕子的论坛上有13个球的。
第一次4 V 4
以后的情况得看前一次称量的结果。。
总之要一大堆的if
else 语句。。。
以下从http://转载:(关于13个球的称法)
题目描述:
有13个外表一模一样的球,编号从1-13,
不过有一个球的质量和其它的球不一样,
并且不知道是轻了还是重了。
现在需要你使用一个天平称三次以内找出来。
程序接口:
猜测函数声明:
int IBalanceBalls(
int nBalls,
// 你要称多少个球
int nLBall[],
// 天平左盘要称的球的编号所组成的数组
int nRBall[]
// 天平右盘要称的球的编号所组成的数组
);
返回值:
1 :右盘重
0 :两边平衡
-1:左盘重
提交函数声明:
int ISubmit(
int nBallIndex // 质量不一样的球的编号
);
返回值:
0: 无下一测试数据,请退出程序
1: 还有下一组数据,请接着循环
输入:
无输入
输出:
无输出。
样例输入:
无样例
样例输出:
无样例
其它信息:
nLBall和nRBall那两个数据的下标从0至nBalls-1为有效内容
里面的内容是球的编号,注意是从1-13,否则会RE
以上两个函数已预定义,不需要声明便可使用
IBalanceBalls函数调用三次以后必须调用ISubmit函数,否则会出错
难度:Normal
#define PB_ID 88
int noEnd =1;
int Search8(int n, int heavy[], int light[], int rest[])
{
int a[3] = {heavy[0], heavy[1], rest[0]};
int b[3] = {heavy[2], heavy[3], light[0]};
int temp =IBalanceBalls(3, a, b);
if( 0 ==temp)
{
if( 0 ==(temp =IBalanceBalls(1, light+1, light+2)))
noEnd = ISubmit(light[3]);
else if( -1 ==temp )
noEnd = ISubmit(light[2]);
else
noEnd = ISubmit(light[1]);
}
else if(-1 == temp)
{
if( 0 == (temp =IBalanceBalls(1, heavy, heavy+1)))
noEnd = ISubmit(light[0]);
else if( -1 == temp)
noEnd = ISubmit(heavy[0]);
else
noEnd =ISubmit(heavy[1]);
}
else
{
if( -1 ==IBalanceBalls(1, heavy+2, heavy+3))
noEnd = ISubmit(heavy[2]);
else
noEnd = ISubmit(heavy[3]);
}
return 0;
}
int main()
{
while( noEnd)
{
int lBalls[4] = {1,2,3,4};
int rBalls[4] = {5,6,7,8};
int rest[5] = {9,10,11,12,13};
int n;
if(0 ==(n=IBalanceBalls(4, lBalls, rBalls)))
{
if(0 ==(n=IBalanceBalls(3, lBalls, rest)))
{
if( 0 ==(n= IBalanceBalls(1,lBalls, rest+3)))
noEnd =ISubmit(rest[4]);
else
noEnd =ISubmit(rest[3]);
}
else if( -1 == n)
{
if( 0 ==(n = IBalanceBalls(1,rest,rest+1)))
noEnd =ISubmit(rest[2]);
else if(-1 == n)
noEnd = ISubmit(rest[1]);
else
noEnd = ISubmit(rest[0]);
}
else
{
if( 0 ==(n = IBalanceBalls(1,rest,rest+1)))
noEnd = ISubmit(rest[2]);
else if(-1 == n)
noEnd =ISubmit(rest[0]);
else
noEnd = ISubmit(rest[1]);
}
}
else if(-1 ==n)
Search8(4,lBalls, rBalls, rest);
else
Search8(4,rBalls,lBalls, rest);
}
return 0;
}
1、其中关于IBalanceBalls函数我想是关于两边球的质量和的比较,这个比较简单。。。可以自己写。
但是我对于函数调用次数怎么统计不清楚,请高手给我个实例。。谢谢!
2、ISubmit就更简单了,一个判断加return,也可以加上一个输出。
我是新手,如有不对,请指正。。
望有高手帮我解决函数调用次数的统计问题。。
[[it] 本帖最后由 himpo 于 2008-6-21 08:35 编辑 [/it]]