C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++の掛け算の九九でK番目に小さい数


1つの掛け算の九九について知っていると仮定します。しかし、九九からk番目に小さい数をすばやく見つけることができますか?したがって、高さm、長さnのa m * n掛け算の九九、および1つの正の整数kが必要な場合、この表でk番目に小さい数を見つける必要があります。

したがって、m=3およびn=3でkが6の場合、出力は4になります。これは、掛け算の九九が-

のようなものであるためです。

1 2 3
1 1 2 3
2 2 4 6
3 3 6 9

6番目に小さい要素は[1,2,2,3,3,4,6,6,9]

として4です。

これを解決するには、次の手順に従います-

  • 関数ok()を定義します。これには、m、n、x、
  • が必要です。
  • ret:=0
  • iを初期化する場合:=1、i <=nの場合、更新(iを1つ増やす)、実行-
    • temp:=x/iとmの最小値
    • ret:=ret + temp
  • return ret
  • メインの方法から、次の手順を実行します-
  • ret:=-1、low:=1、high:=m * n
  • 低い<=高い間、-
      を実行します
    • 中:=低+(高-低)/ 2
    • cnt:=ok(m、n、mid)
    • cnt> =kの場合、-
      • 高:=中-1
      • ret:=mid
    • それ以外の場合
      • 低:=中+1
  • return ret

理解を深めるために、次の実装を見てみましょう-

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int ok(int m, int n, int x){
      int ret = 0;
      for(int i = 1; i <= n; i++){
         int temp = min(x / i, m);
         ret += temp;
      }
      return ret;
   }
   int findKthNumber(int m, int n, int k) {
      int ret = -1;
      int low = 1;
      int high = m * n ;
      while(low <= high){
         int mid = low + (high - low)/ 2;
         int cnt = ok(m, n, mid);
         if(cnt >= k){
            high = mid - 1;
            ret = mid;
         }else low = mid + 1;
      }
      return ret;
   }
};
main(){
   Solution ob;
   cout << (ob.findKthNumber(3,3,6));
}

入力

“2*”

出力

4

  1. C++のCHAR_BIT

    CHAR_BITは、charのビット数です。これは、C++言語の「limits.h」ヘッダーファイルで宣言されています。 1バイトあたり8ビットです。 これがC++言語のCHAR_BITの例です 例 #include <bits/stdc++.h> using namespace std; int main() {    int x = 28;    int a = CHAR_BIT*sizeof(x);    stack<bool> s;    cout << "T

  2. 掛け算の九九を生成するC++プログラム

    掛け算の九九は、任意の数の掛け算演算を定義するために使用されます。これは通常、基数10の数値を使用した初等算術演算の基礎を築くために使用されます。 任意の数の掛け算の九九は10まで書き込まれます。各行には、1から10までの数の積が表示されます。 4の九九の例は次のとおりです- 4 * 1 = 4 4 * 2 = 8 4 * 3 = 12 4 * 4 = 16 4 * 5 = 20 4 * 6 = 24 4 * 7 = 28 4 * 8 = 32 4 * 9 = 36 4 * 10 = 40 与えられた数の掛け算の九九を生成するプログラムは次のとおりです。 例 #include <io