ナットとボルトの問題
この問題は、クイックソート手法によって解決されます。ボルトの最後の要素をピボットとして使用して、ナットリストを再配置し、ボルトがピボット要素であるナットの最終位置を取得します。ナットリストを分割した後、選択したナットを使用してボルトリストを分割できます。左右のサブリストに対して同じタスクを実行して、すべての一致を取得します。
入力と出力
Input: The lists of locks and keys. nuts = { ),@,*,^,(,%, !,$,&,#} bolts = { !, (, #, %, ), ^, &, *, $, @ } Output: After matching nuts and bolts: Nuts: ! # $ % & ( ) * @ ^ Bolts: ! # $ % & ( ) * @ ^
アルゴリズム
パーティション(配列、低、高、ピボット)
入力: 1つの配列、低インデックスと高インデックス、ピボット要素。
出力: ピボット要素の最終的な場所。
Begin i := low for j in range low to high, do if array[j] < pivot, then swap array[i] and array[j] increase i by 1 else if array[j] = pivot, then swap array[j] and array[high] decrease j by 1 done swap array[i] and array[high] return i End
nutAndBoltMatch(ナット、ボルト、低、高)
入力: ナットのリスト、ボルトのリスト、アレイの上下のインデックス。
出力: どのナットがどのボルト用かを表示します。
Begin pivotLoc := partition(nuts, low, high, bolts[high]) partition(bolts, low, high, nuts[pivotLoc]) nutAndBoltMatch(nuts, bolts, low, pivotLoc-1) nutAndBoltMatch(nuts, bolts, pivotLoc + 1, high) End
例
#include<iostream> using namespace std; void show(char array[], int n) { for(int i = 0; i<n; i++) cout << array[i] << " "; } int partition(char array[], int low, int high, char pivot) { //find location of pivot for quick sort int i = low; for(int j = low; j<high; j++) { if(array[j] <pivot) { //when jth element less than pivot, swap ith and jth element swap(array[i], array[j]); i++; }else if(array[j] == pivot) { //when jth element is same as pivot, swap jth and last element swap(array[j], array[high]); j--; } } swap(array[i], array[high]); return i; //the location of pivot element } void nutAndBoltMatch(char nuts[], char bolts[], int low, int high) { if(low < high) { int pivotLoc = partition(nuts, low, high, bolts[high]); //choose item from bolt to nut partitioning partition(bolts, low, high, nuts[pivotLoc]); //place previous pivot location in bolt also nutAndBoltMatch(nuts, bolts, low, pivotLoc - 1); nutAndBoltMatch(nuts, bolts, pivotLoc+1, high); } } int main() { char nuts[] = {')','@','*','^','(','%','!','$','&','#'}; char bolts[] = {'!','(','#','%',')','^','&','*','$','@'}; int n = 10; nutAndBoltMatch(nuts, bolts, 0, n-1); cout << "After matching nuts and bolts:"<< endl; cout << "Nuts: "; show(nuts, n); cout << endl; cout << "Bolts: "; show(bolts, n); cout << endl; }
出力
After matching nuts and bolts: Nuts: ! # $ % & ( ) * @ ^ Bolts: ! # $ % & ( ) * @ ^
-
Google Chrome とデスクトップ アイコンの更新の問題
これは、あなたが直面するかもしれない、または読んだことがあるかもしれない、最も奇妙な小さな問題です。 Windows マシンの 1 つで、奇妙な現象に気付きました。 Google Chrome (執筆時の最新バージョン) を起動するたびに、ブラウザーを閉じるか、または、できれば Gmail アカウントにサインインまたはサインアウトするたびに、すべてのデスクトップ アイコンが更新されます。 あたりを見回すと、2015 年の Chromium バグ レポートが見つかりました。これには回避策も記載されていました。言うまでもなく、特定の回避策は利用できなくなりました。Chrome ウィンドウの境界に
-
Windows 10、8.1、および 7 で 100 ディスク使用量の問題を解決するための 5 つのヒント
起動時にシステムがフリーズしたり、クリックにアプリケーションが応答しないなど、Windows 10 の更新プログラムをインストールした後に Windows 10 のパフォーマンスが低下した場合。また、タスク マネージャーを確認すると、システム ドライブが 100 で実行されていることがわかり、オペレーティング システムの速度が低下する場合があります。多くのユーザーが、この問題はハードディスク ドライブ (HDD) とソリッド ステート ドライブ (SSD) の両方に影響すると報告しています。 100 ディスク使用量を引き起こすさまざまな問題があります Windows 10 の問題。破損したシ