머리말
교사가 프로그램을 작성하도록 요청하기 전에 작성하는 작성, 이쪽은 내 자신의 글입니다.
여기를 클릭, 교사의 자바 구현 코드하시기 바랍니다 있습니다
본문
질문 질문
-
절차 적 요구 사항
경기 - 고정 10 샷 (다른 샷을 넣어보다 가벼운 수), 경기 - 고정 균형을 세 번했다.
-
아이디어를 프로그래밍
동일 중량의 양쪽이, 나머지 경우 : 다섯 공, 제 2 추출 네 빛 가운데 2 공 양측에 배치 된 것을 특징, 완전 일치 판정 빛이 동시에 각각, 균형 공 (5)을 사용하여 처음에 상기 볼은 승부 조작이다 양쪽 다른 무거운, 3 광, 승부 조작의 광을, 두 볼 경우 상기했다.
코드
댓글은 매우 상세하고 카자흐스탄한다.
public class Main {
// 计算数组中连续几个球的质量之和,区间是[startIndex,endIndex]
public static int sum(int[] balls,int startIndex, int endIndex){
int ret =0;
for(int i=startIndex;i<=endIndex;++i){
ret+=balls[i];
}
return ret;
}
// 输入balls是10个球的质量,该函数返回假球在该数组中的下标
public static int findFakeBall(int[] balls){
// 第一次称重,十个,五五分,默认左边五个球中有假球
int fiveStartIndex = 0;
// 如果右边五个球中有假球
if (sum(balls,5,9)<sum(balls,0,4)){
fiveStartIndex = 5;
}
// 第二次称重,五个,二一二分,默认左边两个球中有假球
int twoStartIndex = fiveStartIndex+0;
// 五个球中左边两个球的质量之和和右边两个球的质量之和
int leftTwoSum = sum(balls,fiveStartIndex+0,fiveStartIndex+1);
int rightTwoSum = sum(balls,fiveStartIndex+3,fiveStartIndex+4);
// 如果右边两个球中有假球
if(rightTwoSum<leftTwoSum){
twoStartIndex = fiveStartIndex+3;
// 如果左右两边的四个球中没有假球,则中间的球是假球
}else if(rightTwoSum==leftTwoSum){
return fiveStartIndex+2;
}
// 第三次称重
// 如果两个球中左边是假球
if(balls[twoStartIndex]<balls[twoStartIndex+1]){
return twoStartIndex;
// 如果两个球中右边是假球
}else{
return twoStartIndex+1;
}
}
// 对函数findFakeBall()进行测试
public static void main(String[] args) {
int[] balls = {5,10,10,10,10,10,10,10,10,10}; // 所有球的质量
int fakeIndex =findFakeBall(balls);
System.out.println(fakeIndex);
}
}
저자 : @ 냄새 나는 소금에 절인 생선
: 소스 표시하시기 바랍니다 https://www.cnblogs.com/chouxianyu/을
논의 및 공유에 오신 것을 환영합니다!