请教个问题。。(古典称球问题)
时间:2011-12-05
来源:互联网
//称球问题: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编译器编译。
//有一天平,没有砝码;
//请用最快的方法找出次球。
#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编译器编译。
作者: s867097115 发布时间: 2011-12-05
1个和另外的不同,我没仔细看代码
但是如果用到求和,异常重量是0的时候,加了等于没加,可能问题出在这里吧
如果如此,你换任意的非0整数应该都可以
但是如果用到求和,异常重量是0的时候,加了等于没加,可能问题出在这里吧
如果如此,你换任意的非0整数应该都可以
作者: libralibra 发布时间: 2011-12-05
你第一个定义了一个全局变量a[12],系统将自动初始化为0,而后你在main定义了一个局部的a[12],那么你仔细看看weight()函数你会发现weight()函数使用的a[12]是全局变量也就是全部初始化为0的。所以无论你main中的a[12]如何赋值,结果一定是cont<<"0"。
另外你的方法应该不是最快的,我记得应该是3次,而你的是4次。
另外你的方法应该不是最快的,我记得应该是3次,而你的是4次。
作者: shw111517 发布时间: 2011-12-06
这题最快是4次,很麻烦
作者: liuxingvcvc 发布时间: 2011-12-06
引用 3 楼 liuxingvcvc 的回复:
这题最快是4次,很麻烦
这题最快是4次,很麻烦
这题最快是3次,打错了
作者: liuxingvcvc 发布时间: 2011-12-06
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28