ユニーク
#include <cstdioを> する#include <アルゴリズム> の#include <iostreamの> 使用して 名前空間STD、 INT A [] = { 1、3、3、3、5、6、0、0、8、7、8 }; int型メイン(){ // UNIQUE(iter1、iter2)、左及び開閉する権利、返された重複排除後の「最終アドレス」である- >ポインタ // 元の配列の異なる注意および終了アドレス // 元の配列の大きさ、及び変化 // だけ元の配列の後ろに配置された要素の繰り返し独自機能 // 重複排除要素は、連続的に繰り返さを意味しません // そう頻繁に配列行を再度使用すると、繰り返しのすべての要素を削除することができますので、再ソート後の int型 SZ = UNIQUE(A、A + はsizeof(A)/ はsizeof(int型)) - ; のため(int型 I = 0 ; ++; IはSZ < I){ COUT << A [I] << ' ' ; } COUT << ENDL、 COUT << SZ << ENDLは、 戻り 0 ; }
バウンド
/ * LOWER_BOUNDとUPPER_BOUND原則はバイナリ検索されているが、効率が非常に高いです :条件を満たすために「最初」のリターンアドレス要素 注間隔があり、「右に左に閉じ」! UPPER_BOUND(は、終了、NUM始める) - より厳密に大きい第NUM 最初以下NUM - LOWER_BOUND(開始、終了、 NUM)は 第1のアドレス要素を減算することによってインデックスを得ることができる 、または(ルックアップが失敗した終了します) 以下の一般的なソート使用 * / の#include <アルゴリズム> の#include <cstdioを> する#include <iostreamの> する#include <cstdlib> 使用して 名前空間STDを、 int型のmain(){ int型 A [] = { 1、2、7。、3、15、34 }。 ソート( + はsizeof(A)/ はsizeof(INT ))。 INT POS = LOWER_BOUND(+ はsizeof(A)/ はsizeof(INT)、7) - 。 COUT << [POS] << ENDL。 POS = UPPER_BOUND(+ はsizeof(A)/ はsizeof(INT)、7) - 。 COUT << [POS] << ENDL。 リターン 0 ; }
GCD
/ * 削除分割&&減少/ * の#include <cstdioを> する#include <iostreamの> 使用して 名前空間STD; //が減少し、注目条件のA> = B / * 例は理解する: 仮定2個のボール161と63の最大公約数の数、Mは設定溶液である ことがM-- 98割り切れるため、161より大きいが、63 + 98、63とみなすことができる必要があり、また分割のm 63の最大公約数を求めるに問題と98 この時点で、98は63 + 35として見ることができる- > 63と35の変換のために最大公約数 ............ 7,7の最大公約数のために最後の変換 * / INT(F int型、int型B){ IF(A < B)スワップ(A、B); INT R&LT A- = B; IF(R&LT == 0)リターン; IF(R&LT> b)に戻りF(R&LT、B); 他 戻りF(B、R&LTを); } // 解決は、Bの最大公約数 @は除算を除去する:実際には、ときに減少バリアント / * プレゼンテーションの減少が上側に見出すことができる中 及びBが減算を停止するまで(> b)の最大公約数を連続的に、B低減される見つける - >%bが得られた最終剰余と等価です - >これは、分割された減少を最適化するために除去される * / // 再帰バージョン のint gcd_recursion(INT A、int型B){ IF(< ; B)スワップ(A、B) リターン(Bの== 0?)A:gcd_recursion(B、%のB); } // ループバージョン int型 gcd_loop(INT、int型B){ 場合(< B)スワップ(B) int型のR; 一方、(B!= 0 ){ R =%のB; = B; B = R。 } を返します。 } INT {main()の int型、B。 scanf関数(" %D%dの"、&、&B)。 printf(" GCD =%D%D%D \ n " 、gcd_loop(a、b)は、gcd_recursion(a、b)は、F(A、B))。 リターン 0 ; }