这几天一直看到这样的贴子 讨论怎么称出那只不一样的球。
其实这不怎么难的,只要静下心来好好想一想, 理清自己的思路的话
肯定能想到的
下面是我的分析过程
L: Left R:Right
①Weight (0+1+2+3,4+5+6+7)
|---L=R -->[8,9,10,11]
|---②Weight (8,9)
| |---L=R -->[10,11]
| |---③Weight (8,10)
| | |---L=R -->[11]
| | |---L!=R -->[10]
| |
| |---L!=R -->[8,9]
| |---③Weight (8,10)
| |---L=R -->[9]
| |---L!=R -->[8]
|
|---L>R -->[0,1,2,3,4,5,6,7]
|---②Weight (0+4+11, 1+2+5)
| |---L=R -->[3,6,7]
| |---③Weight (6,7)
| | |---L=R -->[3]
| | |---L>R -->[7]
| | |---L<R -->[6]
| |
| |---L>R -->[0,5]
| |---③Weight (0,11)
| | |---L=R -->[5]
| | |---L!=R -->[0]
| |
| |---L<R -->[1,2,4]
| |---③Weight (1,2)
| | |---L=R -->[4]
| | |---L>R -->[1]
| | |---L<R -->[2]
|
|---L<R -->[0,1,2,3,4,5,6,7]
|---②Weight (0+4+11, 1+2+5)
|---L=R -->[3,6,7]
|---③Weight (6,7)
| |---L=R -->[3]
| |---L>R -->[6]
| |---L<R -->[7]
|
|---L>R -->[1,2,4]
|---③Weight (1,2)
| |---L=R -->[4]
| |---L>R -->[2]
| |---L<R -->[1]
|
|---L<R -->[0,5]
|---③Weight (0,11)
| |---L=R -->[5]
| |---L!=R -->[0]
这几天也闲得有那么受不了了,于是就用eclipse 配了C/C++的开发环境,简单测试了一下自己称球的程序.
数据要求:全是int范围,12个,有且只有一个是不一样的分量。
输出结果:那只异样的球所在的下标
其实这不怎么难的,只要静下心来好好想一想, 理清自己的思路的话
肯定能想到的
下面是我的分析过程
L: Left R:Right
①Weight (0+1+2+3,4+5+6+7)
|---L=R -->[8,9,10,11]
|---②Weight (8,9)
| |---L=R -->[10,11]
| |---③Weight (8,10)
| | |---L=R -->[11]
| | |---L!=R -->[10]
| |
| |---L!=R -->[8,9]
| |---③Weight (8,10)
| |---L=R -->[9]
| |---L!=R -->[8]
|
|---L>R -->[0,1,2,3,4,5,6,7]
|---②Weight (0+4+11, 1+2+5)
| |---L=R -->[3,6,7]
| |---③Weight (6,7)
| | |---L=R -->[3]
| | |---L>R -->[7]
| | |---L<R -->[6]
| |
| |---L>R -->[0,5]
| |---③Weight (0,11)
| | |---L=R -->[5]
| | |---L!=R -->[0]
| |
| |---L<R -->[1,2,4]
| |---③Weight (1,2)
| | |---L=R -->[4]
| | |---L>R -->[1]
| | |---L<R -->[2]
|
|---L<R -->[0,1,2,3,4,5,6,7]
|---②Weight (0+4+11, 1+2+5)
|---L=R -->[3,6,7]
|---③Weight (6,7)
| |---L=R -->[3]
| |---L>R -->[6]
| |---L<R -->[7]
|
|---L>R -->[1,2,4]
|---③Weight (1,2)
| |---L=R -->[4]
| |---L>R -->[2]
| |---L<R -->[1]
|
|---L<R -->[0,5]
|---③Weight (0,11)
| |---L=R -->[5]
| |---L!=R -->[0]
这几天也闲得有那么受不了了,于是就用eclipse 配了C/C++的开发环境,简单测试了一下自己称球的程序.
数据要求:全是int范围,12个,有且只有一个是不一样的分量。
输出结果:那只异样的球所在的下标
#include<iostream>
#include <fstream>
using namespace std;
int Weight(int ,int );
int main(int argc,char*[])
{
int aBall[12];
int Balance;
ifstream File;
File.open("Data.txt");
for (int i =0 ;i<12;i++){
File>>aBall[i];
}
//File.close;
Balance = Weight(aBall[0] + aBall[1] + aBall[2] + aBall[3],aBall[4] + aBall[5] + aBall[6] + aBall[7]) ;
switch (Balance){
case 0: {//8 9 10 11
Balance = Weight(aBall[8],aBall[9]) ;
switch (Balance) {
case 0:{
Balance = Weight(aBall[8],aBall[10]) ;
switch (Balance) {
case 0: {
cout<< 11<<endl;
break;
}
case 1:
case 2:{
cout<< 10<<endl;
break;
}
}
break;
}
case 1:
case 2:{
Balance = Weight(aBall[8],aBall[10]) ;
switch (Balance) {
case 0:{
cout<< 9<<endl;
break;
}
case 1:
case 2:{
cout<< 8<<endl;
break;
}
}
break;
}
}
break;
}
case 1:{//0 1 2 3 4 5 6 7
Balance = Weight(aBall[0]+aBall[4]+aBall[11],aBall[1]+aBall[2]+aBall[5]) ;
switch (Balance) {
case 0: {//3 6 7
Balance = Weight(aBall[6],aBall[7]);
switch (Balance) {
case 0:{
cout<< 3<<endl;
break;
}
case 1:{
cout<< 7<<endl;
break;
}
case 2:{
cout<< 6<<endl;
break;
}
}
break;
}
case 1:{//0 5
Balance = Weight(aBall[0],aBall[11]) ;
switch (Balance) {
case 0:{
cout<< 5<<endl;
break;
}
case 1:
case 2:{
cout<< 0<<endl;
break;
}
}
break;
}
case 2:{//1 2 4
Balance = Weight(aBall[1],aBall[2]) ;
switch (Balance) {
case 0:{
cout<< 4<<endl;
break;
}
case 1:{
cout<< 1<<endl;
break;
}
case 2:{
cout<< 2<<endl;
break;
}
}
break;
}
}
break;
}
case 2: {
Balance = Weight(aBall[0]+aBall[4]+aBall[11],aBall[1]+aBall[2]+aBall[5]) ;
switch (Balance) {
case 0:{//3 6 7
Balance = Weight(aBall[6],aBall[7]) ;
switch (Balance) {
case 0:{
cout<< 3<<endl;
break;
}
case 1:{
cout<< 6<<endl;
break;
}
case 2:{
cout<< 7<<endl;
break;
}
}
break;
}
case 2:{//0 5
Balance = Weight(aBall[0],aBall[11]) ;
switch (Balance) {
case 0:{
cout<< 5<<endl;
break;
}
case 1:
case 2:{
cout<< 0<<endl;
break;
}
}
break;
}
case 1:{//1 2 4
Balance = Weight(aBall[1],aBall[2]) ;
switch (Balance) {
case 0:{
cout<< 4<<endl;
break;
}
case 1:{
cout<< 2<<endl;
break;
}
case 2:{
cout<< 1<<endl;
break;
}
}
break;
}
}
break;
}
}
return 0;
}//main
int Weight(int iLeft,int iRight) {
int iRet;
if (iLeft == iRight)
iRet = 0;
if (iLeft > iRight)
iRet = 1;
if (iLeft < iRight)
iRet = 2;
return iRet;
}
#include <fstream>
using namespace std;
int Weight(int ,int );
int main(int argc,char*[])
{
int aBall[12];
int Balance;
ifstream File;
File.open("Data.txt");
for (int i =0 ;i<12;i++){
File>>aBall[i];
}
//File.close;
Balance = Weight(aBall[0] + aBall[1] + aBall[2] + aBall[3],aBall[4] + aBall[5] + aBall[6] + aBall[7]) ;
switch (Balance){
case 0: {//8 9 10 11
Balance = Weight(aBall[8],aBall[9]) ;
switch (Balance) {
case 0:{
Balance = Weight(aBall[8],aBall[10]) ;
switch (Balance) {
case 0: {
cout<< 11<<endl;
break;
}
case 1:
case 2:{
cout<< 10<<endl;
break;
}
}
break;
}
case 1:
case 2:{
Balance = Weight(aBall[8],aBall[10]) ;
switch (Balance) {
case 0:{
cout<< 9<<endl;
break;
}
case 1:
case 2:{
cout<< 8<<endl;
break;
}
}
break;
}
}
break;
}
case 1:{//0 1 2 3 4 5 6 7
Balance = Weight(aBall[0]+aBall[4]+aBall[11],aBall[1]+aBall[2]+aBall[5]) ;
switch (Balance) {
case 0: {//3 6 7
Balance = Weight(aBall[6],aBall[7]);
switch (Balance) {
case 0:{
cout<< 3<<endl;
break;
}
case 1:{
cout<< 7<<endl;
break;
}
case 2:{
cout<< 6<<endl;
break;
}
}
break;
}
case 1:{//0 5
Balance = Weight(aBall[0],aBall[11]) ;
switch (Balance) {
case 0:{
cout<< 5<<endl;
break;
}
case 1:
case 2:{
cout<< 0<<endl;
break;
}
}
break;
}
case 2:{//1 2 4
Balance = Weight(aBall[1],aBall[2]) ;
switch (Balance) {
case 0:{
cout<< 4<<endl;
break;
}
case 1:{
cout<< 1<<endl;
break;
}
case 2:{
cout<< 2<<endl;
break;
}
}
break;
}
}
break;
}
case 2: {
Balance = Weight(aBall[0]+aBall[4]+aBall[11],aBall[1]+aBall[2]+aBall[5]) ;
switch (Balance) {
case 0:{//3 6 7
Balance = Weight(aBall[6],aBall[7]) ;
switch (Balance) {
case 0:{
cout<< 3<<endl;
break;
}
case 1:{
cout<< 6<<endl;
break;
}
case 2:{
cout<< 7<<endl;
break;
}
}
break;
}
case 2:{//0 5
Balance = Weight(aBall[0],aBall[11]) ;
switch (Balance) {
case 0:{
cout<< 5<<endl;
break;
}
case 1:
case 2:{
cout<< 0<<endl;
break;
}
}
break;
}
case 1:{//1 2 4
Balance = Weight(aBall[1],aBall[2]) ;
switch (Balance) {
case 0:{
cout<< 4<<endl;
break;
}
case 1:{
cout<< 2<<endl;
break;
}
case 2:{
cout<< 1<<endl;
break;
}
}
break;
}
}
break;
}
}
return 0;
}//main
int Weight(int iLeft,int iRight) {
int iRet;
if (iLeft == iRight)
iRet = 0;
if (iLeft > iRight)
iRet = 1;
if (iLeft < iRight)
iRet = 2;
return iRet;
}