시합 포인트 추측

모 회사 에서 퀴즈 대 회 를 열 었 다.문제 의 채점 규칙 은 다음 과 같다. 1. 각 선 수 는 10 개의 질문 (번 호 는 1 에서 10) 에 대답 해 야 하 며 뒤에 갈수 록 어렵다.정 답 을 맞 히 면 현재 얻 은 점수 가 배가 됩 니 다.틀 리 면 문제 번호 와 같은 점 수 를 공제 한다.2. 모든 선수 에 게 걸음 마 점수 가 10 점 이다. 
  프로그램 요구: 만약 에 어떤 승리 선수 가 최종 적 으로 X 점 을 얻 었 다 면 경기 과정 을 보지 못 하 게 한다 면 그 (그녀) 가 어떤 문 제 를 맞 혔 는 지, 어떤 문 제 를 틀 렸 는 지 추측 해 보 세 요.맞 힌 문 제 를 1 로 기록 하고 틀린 문 제 를 0 으로 기록 하면 10 문제 의 대답 상황 은 1 과 0 만 포 함 된 꼬치 로 표시 할 수 있다.예: 001011011 10 문제 의 번 호 를 왼쪽 에서 오른쪽으로 순서대로 배열 하 는 것 이 가능 한 상황 이다.당신 의 임 무 는 이 점 수 를 만족 시 킬 수 있 는 모든 가능 한 상황 을 계산 하 는 것 입 니 다. 답 은 | 번호 로 구분 되 고 답 은 순 서 를 매 겨 야 합 니 다. 답 을 10 진법 으로 바 꾼 후 숫자 가 작은 것 이 앞 에 있 습 니 다. 즉, 001011011011 은 101011011011 앞 에 있어 야 합 니 다.이 점 수 를 만족 시 키 지 않 으 면 10 개 출력 0: 00000000  실행 시간 제한: 무제 한  메모리 제한: 무제 한  입력: 선수 의 득점, 정수.  출력: 입력 득점 의 모든 가능 한 상황 을 만족 시 키 고 답 사 이 를 | 번호 로 구분 하 며 답 은 순 서 를 매 겨 야 한다. 답 을 10 진법 으로 바 꾼 후 숫자 가 작은 것 이 앞 에 있어 야 한다. 즉, 001011011011 은 1010110111 앞 에 있어 야 한다.이 점 수 를 만족 시 키 지 않 으 면 10 개 출력 0: 00000000  샘플 입력: 100  샘플 출력: 0010110011|0111010000|1011010000 
import java.util.ArrayList;
import java.util.List;

public class Text {
	static boolean flag = false;
	static List<ArrayList<Integer>> list = new ArrayList<>();

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		int[] x = new int[10];
		//   
		cal(x, 0, 100);

		if (flag == false) {
			for (int i = 0; i < 9; i++) {

				System.out.print("0:0000000000|");
			}
			System.out.print("0:0000000000");
		} else {
			for (int j = 0; j < list.size() - 1; j++) {
				for (int temp : list.get(j)) {
					System.out.print(temp);
				}
				System.out.print("|");
			}
			for (int temp : list.get(list.size() - 1)) {
				System.out.print(temp);
			}
		}

	}

	/**
	 * 
	 * @param arr
	 *              
	 * @param scorecount
	 *              
	 */
	public static boolean cal1(int[] arr, int scorecount) {

		int score = 10;
		for (int i = 0; i < arr.length; i++) {
			if (arr[i] == 0) {
				score = score - i - 1;
			} else {
				score = 2 * score;
			}
		}
		if (score == scorecount) {
			return true;
		} else {
			return false;
		}

	}

	/**
	 *     
	 * 
	 * @param arr
	 *                  
	 * @param n
	 *              
	 * @param score
	 *              
	 */
	public static void cal(int[] arr, int n, int score) {
		if (n >= arr.length) {
			if (cal1(arr, score)) {
				ArrayList<Integer> temp = new ArrayList<>();
				for (int j : arr) {
					temp.add(j);

				}
				list.add(temp);
				flag = true;

			} 
			return;
		}
		//       ,  0 1 
		arr[n] = 0;
		//                
		cal(arr, n + 1, score);
		arr[n] = 1;
		cal(arr, n + 1, score);
	}

}

좋은 웹페이지 즐겨찾기