Nを超えず、Sに数値を含まない最大の数
指定された数値 N を超えず、文字列 S にどの桁も含まれない最大の数値を見つけるという課題は、文字列操作と数論を伴う問題です。目標は次のとおりです。文字列 S.
で見つかったすべての数字を除外しながら、N 以下の可能な最大の数値を決定します。たとえば、N が 1000、S が「42」であるシナリオを考えてみましょう。この場合、N を超えず、S に桁が含まれない最大の数値は 999 です。これは、999 が、文字列 S の数字 4 と 2 を除く、数字 0、1、3、5、6、7、8、9 を使用して形成される最大の数値であるためです。
この問題を解決するには、N までのすべての数値を反復処理してその桁が S に存在しないかどうかを確認するか、動的プログラミングやバックトラッキングなどのより複雑な方法を利用するなど、さまざまなアプローチを使用できます。
###アルゴリズム### ステップ1- main() 関数で「N」と「S」という名前の2つの文字列変数を宣言します。
ステップ 2- これら 2 つの変数をパラメータとして LargestNumberFinder() 関数に渡します。
ステップ 3-文字列番号 N と S を暗黙的に整数に変換して、比較などの数学的演算を実行します。 ステップ 4
- 手動で、または毎回同じことを行う関数を作成して、N に格納されている数値から先頭の 0 を削除します。ステップ5
-次に、両方の文字列の桁の比較を開始し、文字列「」の桁を含まない「N」以下で形成される最大の数値を見つけます。 S'.アプローチ 1: - 素朴なアプローチ
別の文字列内のすべての数値を使用して、特定の文字列内の最大の数値を見つける基本的な方法は次のとおりです。 main 関数は変数を宣言し、LargestNumberFinder 関数を呼び出します。この関数は 2 つの文字列を入力として受け取り、文字列 S 内のすべての桁を含む N 未満の値をすべてチェックします。条件が満たされる場合、値は文字列形式で返されます。出席関数は、S を整数データ型に変換する際に、「i」に格納されている値が文字列 S の一部であるかどうかを判断するために使用されます。入力文字列は整数に変換され、ループを使用して条件が評価されます。このコードは、指定された文字列内の、別の文字列にも存在するすべての数値の最大値を出力します。Example
は次のように翻訳されます:
Exampleこのコードは、文字列 S の数字から構成される N (整数に変換された入力文字列) より小さい最大の数値を見つけるソリューションです。このコードでは、「attendance」と「LargestNumberFinder」という 2 つの関数を使用して、最大の数値を決定して返します。出席関数は、整数 'i' と文字列 's' を入力として受け取り、'i' に格納されている値が文字列 's' の一部であるかどうかを確認し、's' を整数データ型に変換します。 LargestNumberFinder 関数は、2 つの文字列 'x' と 's' を入力として受け取り、'x' を整数に変換し、出席関数を使用して N 未満のすべての値とすべての数値が 's' に含まれていることを確認します。 main 関数は変数を宣言し、LargestNumberFinder 関数を呼び出します。この関数は最大の数値を文字列として返します。
リーリー ###出力### リーリー
方法 2: 効率的な方法問題 2 の解決策 (指定された数値文字列 N の数値を指定された文字列 S の数値に置き換えることによって最大の数値を取得する) の場合、これは効率的な方法です。このメソッドは、まず N のすべての数値が S に存在するかどうかを確認し、S で見つかった最初の数値を、S 内で N にない最大の数値に置き換えます。残りの数値は、N にない S の最大の数値に置き換えられます。その後、先頭のゼロが削除され、結果が可能な最大の数値として返されます。この方法は文字列を並べ替える必要がないため、前の方法よりも効率的です。
Example
は次のように翻訳されます:
Exampleこのコードは、文字列「S」に存在しない数字を最も高い数字に置き換えることによって、指定された文字列「N」から形成できる最大の数値を見つける問題を解決します。このコードは、効率的な方法を利用して、問題です。LargestNumberFinder 関数は、2 つの文字列入力 "num" と "s" を受け取り、可能な最大の数値を返します。ベクトル "vis_s" は、文字列 "s" の値を格納するために利用されます。コードは、最初に最初の文字列を識別します。文字列 "s" の一部である文字列 "num" の桁。次に、その桁を文字列 "s" に存在しない最上位の桁と交換します。次に、コードは文字列 "s" に見つからない最上位の桁を見つけて、残りを置き換えます。文字列 "num" 内の数字とその数字を比較します。先頭のゼロは最後の文字列から削除され、文字列が空の場合、関数は "0" を返します。コードは、入力 "N" で関数を呼び出すことによって結果を出力します。および「S」。
#include <iostream>
#include <string>
#include <vector>
using namespace std;
// function to check for all values of String N with String S and replacing the digit if found same with the largest possible digit not present in S.
string LargestNumberFinder(string num, string s) {
vector<bool> vis_s(10, false);
for (int i = 0; i < (int)s.size(); i++) {
vis_s[int(s[i]) - 48] = true;
}
int n = num.size();
int in = -1;
for (int i = 0; i < n; i++) {
if (vis_s[(int)num[i] - '0']) {
in = i;
break;
}
}
if (in == -1) {
return num;
}
for (char dig = num[in]; dig >= '0'; dig--) {
if (vis_s[(int)dig - '0'] == 0) {
num[in] = dig;
break;
}
}
char LargestDig = '0';
for (char dig = '9'; dig >= '0'; dig--) {
if (vis_s[dig - '0'] == false) {
LargestDig = dig;
break;
}
}
for (int i = in + 1; i < n; i++) {
num[i] = LargestDig;
}
int Count = 0;
for (int i = 0; i < n; i++) {
if (num[i] == '0')
Count++;
else
break;
}
num.erase(0, Count);
if ((int)num.size() == 0)
return "0";
return num;
}
int main() {
string N = "161516";
string S = "756";
cout << LargestNumberFinder(N, S);
return 0;
}
ログイン後にコピー
Output
149999
ログイン後にコピー
结论
#include <iostream> #include <string> #include <vector> using namespace std; // function to check for all values of String N with String S and replacing the digit if found same with the largest possible digit not present in S. string LargestNumberFinder(string num, string s) { vector<bool> vis_s(10, false); for (int i = 0; i < (int)s.size(); i++) { vis_s[int(s[i]) - 48] = true; } int n = num.size(); int in = -1; for (int i = 0; i < n; i++) { if (vis_s[(int)num[i] - '0']) { in = i; break; } } if (in == -1) { return num; } for (char dig = num[in]; dig >= '0'; dig--) { if (vis_s[(int)dig - '0'] == 0) { num[in] = dig; break; } } char LargestDig = '0'; for (char dig = '9'; dig >= '0'; dig--) { if (vis_s[dig - '0'] == false) { LargestDig = dig; break; } } for (int i = in + 1; i < n; i++) { num[i] = LargestDig; } int Count = 0; for (int i = 0; i < n; i++) { if (num[i] == '0') Count++; else break; } num.erase(0, Count); if ((int)num.size() == 0) return "0"; return num; } int main() { string N = "161516"; string S = "756"; cout << LargestNumberFinder(N, S); return 0; }
149999
通过这篇文章,我们更接近理解这些问题背后的原因,并理解了这些概念,这些概念将帮助我们在之前提到的重大实际问题中使用这些基本概念。就像在我们的代码中,我们分别解决每个问题,然后像制作美丽的手工品一样将代码缝合在一起,同样,我们将使用这个概念,尝试逐个解决问题。我们通常会从朴素的方法开始,但通过敏锐的眼光和努力,我们会找到更高效的方法。谁知道在阅读完这篇文章后,你会找到更好、更高效的方法,并进一步简化解决方案。所以,让我们坚持我们的信念和对思维和编码的信任,同时告别。
以上がNを超えず、Sに数値を含まない最大の数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









スタンバイは、iPhone が充電器に接続され、水平 (または横) 向きになっているときにアクティブになるロック画面モードです。これは 3 つの異なる画面で構成されており、そのうちの 1 つは全画面表示されます。時計のスタイルを変更する方法については、この記事を読んでください。 StandBy の 3 番目の画面には、垂直にスワイプできるさまざまなテーマで時刻と日付が表示されます。一部のテーマでは、温度や次のアラームなどの追加情報も表示されます。時計を押し続けると、デジタル、アナログ、ワールド、ソーラー、フローティングなどのさまざまなテーマを切り替えることができます。 Float はカスタマイズ可能な色の大きなバブル数字で時間を表示します。Solar はさまざまな色の太陽フレアのデザインを備えたより標準的なフォントを持ち、World は世界を強調表示して表示します。

乱数や英数字の文字列を生成する機能は、多くの状況で役立ちます。これを使用して、ゲーム内のさまざまな場所に敵や食べ物をスポーンできます。これを使用して、ユーザーにランダムなパスワードを提案したり、ファイルを保存するためのファイル名を作成したりすることもできます。 PHP でランダムな英数字文字列を生成する方法に関するチュートリアルを書きました。この投稿の冒頭で、真にランダムなイベントはほとんどないと述べましたが、乱数や文字列の生成にも同じことが当てはまります。このチュートリアルでは、JavaScript で擬似ランダムな英数字文字列を生成する方法を説明します。 JavaScript での乱数の生成 まずは乱数を生成してみましょう。最初に思い浮かぶメソッドは Math.random() です。これは浮動小数点を返します。

数値を出力として表現することは、どの言語でプログラムを作成する場合でも興味深い、重要な作業です。整数型 (short、long、または Medium 型のデータ) の場合、出力として数値を表すのは簡単です。浮動小数点数 (float または double 型) の場合、特定の小数点以下の桁数に四捨五入する必要がある場合があります。たとえば、52.24568 を小数点以下 3 桁で表現したい場合は、前処理が必要です。この記事では、浮動小数点数を四捨五入して特定の小数点以下の桁数に表現するいくつかのテクニックを紹介します。さまざまなアプローチの中でも、C に似たフォーマット文字列を使用すること、precision 引数を使用すること、および数学ライブラリのround() 関数を使用することが重要です。一つずつ見ていきましょう。と

私たちは皆、2、3、5、7、8 など、数の 2 乗ではない数字を知っています。非正方形の数は N 個あり、すべての数を知ることは不可能です。そこで、この記事では、平方なしまたは非平方数と、C++ で N 番目の非平方数を見つける方法についてすべて説明します。 N 番目の非平方数 数値が整数の 2 乗である場合、その数値は完全平方と呼ばれます。完全平方数の例としては、-1issquareof14issquareof29issquareof316issquareof425issquareof5 などがあります。数値がどの整数の平方でもない場合、その数値は非正方形と呼ばれます。たとえば、最初の 15 個の非平方数は -2、3、5、6 です。

PHP プログラミング言語では、is_numeric() 関数は非常によく使用される関数で、変数または値が数値かどうかを判断するために使用されます。実際のプログラミングでは、ユーザーが入力した値が数値型であるかどうかを検証する必要がある場合が多く、この場合には is_numeric() 関数を使用して判定することができます。 1. is_numeric() 関数の概要 is_numeric() 関数は、変数または値が数値であるかどうかを検出するために使用される関数です。変数または値が数値の場合は true を返します

Java の数値 数値クラスは有形のクラスではなく、抽象クラスであることを理解することが重要です。その中には、その機能を定義する一連のラッパー クラスがあります。これらのラッパー クラスには、Integer、Byte、Double、Short、Float、Long が含まれます。これらは前に説明したのと同じ基本的なデータ型ですが、クラスの命名規則に準拠するために大文字の名前を持つ別のクラスとして表されていることに気づくでしょう。コンパイラは、特定の関数またはプログラム スコープの必要に応じて、プリミティブ データ型をオブジェクトに、またはその逆に自動的に変換します。数値クラスは java.lang パッケージの一部です。このプロセスは、オートボックス化およびアンボックス化と呼ばれます。数値クラスとそれに対応するラッパー クラスの抽象的な性質を理解することで、次のことが可能になります。

この記事では、2 から 10 までのどの数値でも割り切れない 1 から n (指定された) までの数値を見つける問題について説明します。いくつかの例でこれを理解しましょう - 入力:num=14出力:3説明:Therearethreenumbers,1,11,and13,thatarenotdivisible.Input:num=21Output:5説明:Therearefivenumbers1,11,13,17,and19,thatarenotdivisible. 解決済み シンプルなメソッド if

数学における 5 の割り算の法則は、数字が 0 または 5 で終わる場合、その数字は 5 で割り切れるというものです。 5 の割り算ルールを決定する別の方法があります。剰余が 0 の場合、5 で割り切れる数を返します。 mod(%) 演算子は、整数の除算のプログラミングでよく使用されます。例を挙げてみましょう。指定された数値は 525 で、この数値は 5 で終わり、5 で割り切れます。指定された数値は 7050 で、0 で終わり、5 で割り切れます。与えられた数は 678 で、0 と 5 で終わらず、5 で割り切れません。この記事では、その数は5で割り切れるかどうかという問題を解決します。アルゴリズム 次の手順では、java.util.* パッケージを使用してプリミティブ データ型のユーザー入力を取得します。メインクラスから
