C 언어 테스트 칩이 좋은지 나쁜지


문제 설명은
N을 갖는다 (2 <N <20) 좋은지 나쁜지 칩 및 정상적인 칩 및 불량 칩 이상이있다.
각각의 칩이 다른 칩을 테스트 할 수있다. 다른 칩 좋은 칩 테스트, 제대로 테스트 할 수 있습니다 주어진 때 칩은 좋은 또는 나쁜 것입니다. 불량 칩이 다른 칩을 테스트 할 때, 랜덤 (즉없이 칩의 품질 시험의 실제 결과이다) 좋은지 나쁜지 시험 결과를 제공한다.
테스트 결과는 모든 칩을 제공하고, 칩이 좋은 칩이 무엇인지 묻는 메시지가 표시됩니다.
입력 포맷
데이터 입력 동작의 칩의 수를 나타내는 정수 n이다.
제 2 라인 N + 1, N의 N *의 테이블의 동작이고, n은 데이터를 갖는 각 행. 여성 메이크업 데이터는 0 또는 1 각이다. j 번째 열에있는 데이터 (1 <i가, j는 <N ) 테스트 결과가 테스트 칩의 I J 칩 얻어진 i 번째 행을 나타낸다. 1 0 불량, 난 = j는 (칩 자체 검사 결과를 나타내지 않음)는 항상 1이며, 양호한 나타낸다. 칩 자체 테스트 할 수 없습니다.
출력 형식
작은에서 모든 좋은 출력 칩의 가장 많은 순서이다.
샘플 입력

백한
010
백한
샘플의 출력
열세
C 언어 참조 회답 :
포함
#DEFINE 최대 20

메인 IN ()
{
INT N- 텍스트 [20이다] [20이고, I는, J, S는, S는 // 불량 칩의 개수
는 scanf ( "%의 D", N)을;

- 제 (<= 20 인 N-> = 2 && N) 인 경우
{
대 (; I <N- I가 ++ I = 0)
{
대 (J = 0; J <N-, J ++)
{
는 scanf ( "%의 D", 및 텍스트 [I] [J ]);
}
}
// 양품하게, 불량 칩을 제거
J <N-; J ++) (J = 0
{
S = 0;
대 (I = 0; I는 <N-; I는 ++)
{
S + = 텍스트 [I을 [J]
}
의 경우 (S> N / 2)
의 printf ( "%의 D ', J + 1이다.);

}
}
0 반환;
}

발췌 :
다음 두 가지 결론이 유용합니다. 그들은 먼저 나열됩니다.

당신이 무작위로 두 개의 칩 테스트를 선택한 경우가있을 것입니다
결과가 true 인 경우 모두에 해당하거나 거짓, 1).
2) 다른 결과를 적어도 하나는 잘못된 것입니다.

어떤 경우에도 칩에서 불량 칩의 경우보다 더 나은 칩은 모두 칩은 두 그룹으로 나누어집니다. 서랍의 원리에 따르면,이
1) 그룹이 개 좋은 칩이 있어야합니다.
2) 좋은 칩의 수는 불량 칩의 수보다 커야합니다.

시험 절차
1) 칩은 그룹 1, 2, 3, 4로 분할된다. 2K-1과 2K. 우리가 서로를 테스트 할 경우, 우리는 실제 그룹과 같은 결과를 얻을 수 있습니다.
2) 실제 결과와 동일한 세트를 유지하고, 다른 그룹을 버린다. 나쁜 칩셋 칩셋에 비해 확실히 더 좋은. (따라서, 두 개 또는 그 이상의 그룹에 해당하는 경우에만, 그들이 시험 종료 참이어야 함)
결과가 참이면 절반이 폐기 될 수 있도록 3), 칩이 좋은지 나쁜지 것이다. 모든 실제 그룹에서 같은, 어떤 다른이 말에 충실하는 것이 좋은 칩, 새로운 테스트 그룹,이 개 두 그룹 또는 같은 그룹의 두 실제 또는 테스트까지 계속을 형성하기 위해 폐기를 제거합니다.

설명 : 같은 그룹은 진짜 이상한 될 수 있습니다. 어레이가 홀수 일 때 테스트 결과 A가 이상의 칩의 절반과 동일한 경우, 상기 시험을보다 단부 (A로 가정) 상관기를 검사 그룹과 나머지 하나를 선택한다. 그렇지 않으면, 나쁜 칩이다. A는 좋은 칩이 있다면, 그것은 나쁜 칩해야합니다. 나머지 부분을 제거하는 새로운 테스트 그룹을 형성하고, 두 개의 그룹 후에 계속했다.

일반적인 원칙은 골드 러시와 유사하다. 처음에는 좋은 칩이 많이 있었다. 우리는 칩을 제거 할 때, 우리는 나쁜 칩의 수는 좋은 칩의 수보다 크거나 같아야합니다 있는지 확인해야합니다. 이러한 방법으로, 우리는 좋은 칩 칩의 남은 수는 불량 칩보다 더인지 확인 할 수 있습니다. 그룹 때 홀수 더 유효 투표의 절반 이상 (좋고 나쁨 초과 한 효과가 동일하게하는 것이 좋다).

칩의 적어도 하나의 반이 제거되기 때문에, 최악의 경우에는 칩의 절반을 제거하는 시간과 동일한 비율로 감소시켰다. n 개의 칩 테스트의 수가 존재하는 경우, N + (N / 2) + (N / 4) ... = 2N.
특별 사면

추천

출처www.cnblogs.com/blogst/p/10942521.html