C言語のテストチップは、良いか悪いですか


問題の説明は、
N(2 <N <20)良いか悪いチップ、有しており、既知の良品チップと不良チップよりもあります。
各チップは他のチップをテストするために使用することができます。とき、それは正しくチップをテストすることができることを考えると他のチップとの良好なチップテストは、良いか悪いかです。不良チップは他のチップをテストする場合、ランダムに(すなわちかかわらず、チップの品質試験の実際の結果である)良いか悪いテスト結果を与えます。
テスト結果は、すべてのチップを与えられ、そしてチップが良品チップが何であるかを尋ねています。
入力フォーマット
データ入力操作のはチップの数を表す整数nです。
第二のラインn + 1は、n×n個のテーブルの動作であり、nはデータを有する各列。女性のメイクアップのデータは、それぞれ0または1です。j列目のデータ(1 <i、jは<N )のテスト結果は、テストチップのI jのチップを用いて得られたi番目の行を表します。1 0悪いが、私は= jが(チップ自体は、テスト結果を表していない)は常に1であり、良好な表します。チップは、セルフテストすることはできません。
出力フォーマット
小さいものからすべての良い出力チップの数が最も多いためです。
サンプル入力
3
101
010
101個の
サンプルの出力
13
C言語リファレンスの答えは:
が挙げられる:
の#define最大20

主に()
{
int型N-、テキスト[20である]、I、J、S [20である]; S //不良チップの数である
scanf関数( "%のD"、& N)

(N> = 2 && N - <= 20である)なら
、{
ため(I = 0、I <N - 、Iは++)
{
ため(J = 0; J <N-; J ++)
{
scanfの( "%のD"、およびテキスト[I] [J ]);
}
}
//良いチップにするために、不良チップを取り除く
(J = 0と、J <N-; J ++)
{
S = 0;
(I = 0、I <N - 、Iは++)
{
S + =テキスト[I ] [J];
}
場合(S> N / 2)
のprintf( "%のD"、J + 1)。

}
}
戻り0;
}

抜粋:
次の二つの結論が便利です。彼らは、最初に記載されています。

あなたは、ランダムに2チップのテストを選択した場合は、あるでしょう
1)の結果が真であれば、両方がtrueまたはfalseです。
2)他の結果を得るために、少なくとも一方が間違っています。

任意の偶数のチップでは、不良チップの場合よりも優れたチップは、すべてのチップが2つのグループに分割されます。引き出しの原則によると、そこにある
1)グループは、2枚の良いチップを持っている必要があります。
2)優れたチップ数が不良チップ数よりも大きくなければなりません。

試験手順
1)チップをグループ1及び2、図3および図4に分割されています。2K-1および2K。私たちはお互いをテストする場合、私たちは本当のグループと同じ結果を取得する必要があります。
2)実際の結果の同じセットを保持し、他のグループを破棄する。悪いチップセットチップセットよりも確かにもっと良いです。(そのため、2つ以上のグループが真であるときにのみ、彼らはテストの終わり、真でなければならない)
結果が真である場合は、その半分を捨てることができるので3)、チップは、良いか悪いかになります。すべての実グループから同じ、いずれかが別の終わりに固執することは良いチップであり、新しいテストグループ、2つの2のグループまたは同じグループの2つだけ本当かテストまで継続を形成するために、廃棄を削除します。

説明:同じグループは、本当の奇妙になることがあります。配列が奇数である場合、試験結果Aは、試験のAよりよい終わり以上のチップの半分に等しい場合、(Aとする)、任意のグループ試験群と残りの1つを選択します。それ以外の場合は、Aは、不良チップです。Aは良いチップであれば、それは悪いチップでなければなりません。残りの部分を除去した後、新しいテストグループを形成し、二つまたは2つのグループが続きました。

一般的な原則は、ゴールドラッシュに似ています。最初は良いチップがたくさんありました。我々はチップを削除すると、我々は悪いチップの数が良品チップの数以上でなければならないことを確認する必要があります。このように、我々は良いチップ内のチップの残りの数が不良チップを超えていることを確認することができます。ときにグループの奇数、より有効票の半分以上(良いか悪いかより大きいほど効果的で、等しくなるように良いです)。

チップの少なくとも半分が除去されるので、最悪の場合は、チップの半分を除去するための時間であり、同じ割合で減少させました。n個のチップが存在する場合、テストの回数N +(N / 2)+ (N / 4)... = 2N。
特別恩赦

おすすめ

転載: www.cnblogs.com/blogst/p/10942521.html
おすすめ