指定された数値 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
结论
通过这篇文章,我们更接近理解这些问题背后的原因,并理解了这些概念,这些概念将帮助我们在之前提到的重大实际问题中使用这些基本概念。就像在我们的代码中,我们分别解决每个问题,然后像制作美丽的手工品一样将代码缝合在一起,同样,我们将使用这个概念,尝试逐个解决问题。我们通常会从朴素的方法开始,但通过敏锐的眼光和努力,我们会找到更高效的方法。谁知道在阅读完这篇文章后,你会找到更好、更高效的方法,并进一步简化解决方案。所以,让我们坚持我们的信念和对思维和编码的信任,同时告别。
以上がNを超えず、Sに数値を含まない最大の数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

C#は、開発効率とクロスプラットフォームのサポートを必要とするプロジェクトに適していますが、Cは高性能で基礎となるコントロールを必要とするアプリケーションに適しています。 1)C#は、開発を簡素化し、ガベージコレクションとリッチクラスライブラリを提供します。これは、エンタープライズレベルのアプリケーションに適しています。 2)Cは、ゲーム開発と高性能コンピューティングに適した直接メモリ操作を許可します。

C継続的な使用の理由には、その高性能、幅広いアプリケーション、および進化する特性が含まれます。 1)高効率パフォーマンス:Cは、メモリとハードウェアを直接操作することにより、システムプログラミングと高性能コンピューティングで優れたパフォーマンスを発揮します。 2)広く使用されている:ゲーム開発、組み込みシステムなどの分野での輝き。3)連続進化:1983年のリリース以来、Cは競争力を維持するために新しい機能を追加し続けています。

CとXMLの将来の開発動向は次のとおりです。1)Cは、プログラミングの効率とセキュリティを改善するためのC 20およびC 23の標準を通じて、モジュール、概念、CORoutinesなどの新しい機能を導入します。 2)XMLは、データ交換および構成ファイルの重要なポジションを引き続き占有しますが、JSONとYAMLの課題に直面し、XMLSchema1.1やXpath3.1の改善など、より簡潔で簡単な方向に発展します。

最新のCデザインモデルは、C 11以降の新機能を使用して、より柔軟で効率的なソフトウェアを構築するのに役立ちます。 1)ラムダ式とstd :: functionを使用して、オブザーバーパターンを簡素化します。 2)モバイルセマンティクスと完全な転送を通じてパフォーマンスを最適化します。 3)インテリジェントなポインターは、タイプの安全性とリソース管理を保証します。

cマルチスレッドと同時プログラミングのコア概念には、スレッドの作成と管理、同期と相互排除、条件付き変数、スレッドプーリング、非同期プログラミング、一般的なエラーとデバッグ技術、パフォーマンスの最適化とベストプラクティスが含まれます。 1)STD ::スレッドクラスを使用してスレッドを作成します。この例は、スレッドが完了する方法を作成し、待つ方法を示しています。 2)共有リソースを保護し、データ競争を回避するために、STD :: MutexおよびSTD :: LOCK_GUARDを使用するための同期と相互除外。 3)条件変数は、std :: condition_variableを介したスレッド間の通信と同期を実現します。 4)スレッドプールの例は、スレッドプールクラスを使用してタスクを並行して処理して効率を向上させる方法を示しています。 5)非同期プログラミングはSTD :: ASを使用します

Cのメモリ管理、ポインター、テンプレートはコア機能です。 1。メモリ管理は、新規および削除を通じてメモリを手動で割り当ててリリースし、ヒープとスタックの違いに注意を払います。 2。ポインターにより、メモリアドレスを直接操作し、注意して使用します。スマートポインターは管理を簡素化できます。 3.テンプレートは、一般的なプログラミングを実装し、コードの再利用性と柔軟性を向上させ、タイプの派生と専門化を理解する必要があります。

Cは、ハードウェアに近い制御機能とオブジェクト指向プログラミングの強力な機能を提供するため、システムプログラミングとハードウェアの相互作用に適しています。 1)cポインター、メモリ管理、ビット操作などの低レベルの機能、効率的なシステムレベル操作を実現できます。 2)ハードウェアの相互作用はデバイスドライバーを介して実装され、Cはこれらのドライバーを書き込み、ハードウェアデバイスとの通信を処理できます。

Cは、ハードウェア制御と効率的なパフォーマンスに近いため、高性能のゲームおよびシミュレーションシステムの構築に適しています。 1)メモリ管理:手動制御により、断片化が減少し、パフォーマンスが向上します。 2)コンパイル時間の最適化:インライン関数とループ拡張は、ランニング速度を改善します。 3)低レベルの操作:ハードウェアへの直接アクセス、グラフィックスおよび物理コンピューティングの最適化。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

WebStorm Mac版
便利なJavaScript開発ツール

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

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