자바 구현은 세 번 승부 조작을 찾을 수

머리말

교사가 프로그램을 작성하도록 요청하기 전에 작성하는 작성, 이쪽은 내 자신의 글입니다.

여기를 클릭, 교사의 자바 구현 코드하시기 바랍니다 있습니다

본문

질문 질문

  • 절차 적 요구 사항

    경기 - 고정 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/을

논의 및 공유에 오신 것을 환영합니다!


추천

출처www.cnblogs.com/chouxianyu/p/12652969.html