请教个问题。。(古典称球问题)

s867097115 2011-12-05 03:18:38
//称球问题:12个外形相同的圆球,其中一个是次品,不知其轻重,其他11个球重量相同;
//有一天平,没有砝码;
//请用最快的方法找出次球。
#include<iostream>
using namespace std;
int a[12];//12个球的重量
int weight(int i,int j){ //第i个到第j个的重量和
int w=0;
for(int k=i;k<=j;k++) w+=a[k];
return w;
}
void chengqiu(int a[]){
if(weight(0,3)==weight(4,7)){
if(weight(0,1)==weight(8,9)){
if(weight(0,0)==weight(10,10))
cout<<"11";
else cout<<"10";
}
else if(weight(0,0)==weight(8,8))
cout<<"9";
else cout<<"8";
}
else if(weight(0,3)==weight(8,11)){
if(weight(4,5)==weight(8,9)){
if(weight(6,6)==weight(8,8))
cout<<"7";
else cout<<"6";
}
else if(weight(4,4)==weight(8,8))
cout<<"5";
else cout<<"4";
}
else if(weight(0,1)==weight(8,9)){
if(weight(2,2)==weight(8,8))
cout<<"3";
else cout<<"2";
}
else if(weight(0,0)==weight(8,8))
cout<<"1";
else cout<<"0";

}
int main(){
int a[12]={1,1,1,1, 1,1,0,1, 1,1,1,1};
chengqiu(a);
system("pause");
}
-------------------------------
这个程序执行结果不对。但稍微改动了一下:
//称球问题:12个外形相同的圆球,其中一个是次品,不知其轻重,其他11个球重量相同;
//有一天平,没有砝码;
//请用最快的方法找出次球。
#include<iostream>
using namespace std;
int a[12]={1,1,1,2,1,1,1,1,1,1,1,1};;//12个球的重量
int weight(int i,int j){ //第i个到第j个的重量和
int w=0;
for(int k=i;k<=j;k++) w+=a[k];
return w;
}
void chengqiu(int a[]){
…………
…………
}
int main(){
chengqiu(a);
system("pause");
}
就行了。不知道为什么,感觉还是数组定义的问题,哪位大哥帮小弟一下。 dev编译器编译。
...全文
120 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
哈了 2011-12-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 liuxingvcvc 的回复:]

这题最快是4次,很麻烦
[/Quote]
这题最快是3次,打错了
哈了 2011-12-06
  • 打赏
  • 举报
回复
这题最快是4次,很麻烦
shw111517 2011-12-06
  • 打赏
  • 举报
回复
你第一个定义了一个全局变量a[12],系统将自动初始化为0,而后你在main定义了一个局部的a[12],那么你仔细看看weight()函数你会发现weight()函数使用的a[12]是全局变量也就是全部初始化为0的。所以无论你main中的a[12]如何赋值,结果一定是cont<<"0"。
另外你的方法应该不是最快的,我记得应该是3次,而你的是4次。
shw111517 2011-12-06
  • 打赏
  • 举报
回复
可以将下面的MessageBox()替换成 cout
if(OnWeight(0,3) > OnWeight(4,7))
{
if (OnWeight(3,3)+OnWeight(5,5)+OnWeight(8,8) < OnWeight(6,6)+OnWeight(1,2))
{
if (OnWeight(1,1) > OnWeight(2,2))
{
MessageBox(_T("1球重"));
}
else if (OnWeight(1,1) < OnWeight(2,2))
{
MessageBox(_T("2球重"));
}
else
{
MessageBox(_T("5球轻"));
}
}
else if (OnWeight(3,3)+OnWeight(5,5)+OnWeight(8,8) > OnWeight(6,6)+OnWeight(1,2))
{
if (OnWeight(3,3) > OnWeight(8,8))
{
MessageBox(_T("3球重"));
}
else
{
MessageBox(_T("6球轻"));
}
}
else
{
if (OnWeight(4,4) > OnWeight(7,7))
{
MessageBox(_T("7球轻"));
}
else if (OnWeight(4,4) < OnWeight(7,7))
{
MessageBox(_T("4球轻"));
}
else
{
MessageBox(_T("0球重"));
}
}
}
else if (OnWeight(0,3) < OnWeight(4,7))
{
if (OnWeight(3,3)+OnWeight(5,5)+OnWeight(8,8) < OnWeight(6,6)+OnWeight(1,2))
{
if (OnWeight(3,3) < OnWeight(8,8))
{
MessageBox(_T("3球轻"));
}
else
{
MessageBox(_T("6球重"));
}
}
else if (OnWeight(3,3)+OnWeight(5,5)+OnWeight(8,8) > OnWeight(6,6)+OnWeight(1,2))
{
if (OnWeight(1,1) > OnWeight(2,2))
{
MessageBox(_T("2球轻"));
}
else if (OnWeight(1,1) < OnWeight(2,2))
{
MessageBox(_T("1球轻"));
}
else
{
MessageBox(_T("5球重"));
}
}
else
{
if (OnWeight(4,4) > OnWeight(7,7))
{
MessageBox(_T("4球重"));
}
else if (OnWeight(4,4) < OnWeight(7,7))
{
MessageBox(_T("7球重"));
}
else
{
MessageBox(_T("0球轻"));
}
}
}
else
{
if (OnWeight(7,8) < OnWeight(9,10))
{
if (OnWeight(6,7) > OnWeight(8,10))
{
MessageBox(_T("8球轻"));
}
else if (OnWeight(6,7) < OnWeight(8,10))
{
MessageBox(_T("10球重"));
}
else
{
MessageBox(_T("9球重"));
}
}
else if (OnWeight(7,8) > OnWeight(9,10))
{
if (OnWeight(6,7) > OnWeight(8,10))
{
MessageBox(_T("8球重"));
}
else if (OnWeight(6,7) < OnWeight(8,10))
{
MessageBox(_T("10球轻"));
}
else
{
MessageBox(_T("9球轻"));
}
}
else
{
if (OnWeight(10,10) > OnWeight(11,11))
{
MessageBox(_T("11球轻"));
}
else
{
MessageBox(_T("11球重"));
}
}
}
libralibra 2011-12-05
  • 打赏
  • 举报
回复
1个和另外的不同,我没仔细看代码
但是如果用到求和,异常重量是0的时候,加了等于没加,可能问题出在这里吧
如果如此,你换任意的非0整数应该都可以

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧