はあなたが文字列のベクトルにそれを変換することができ
#include <unordered_set>
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
const std::vector<int> numbers{50234, 50356, 50454, 50934};
で始まる言う:
std::vector<std::string> string_numbers;
std::for_each(std::begin(numbers), std::end(numbers), [&](int n){ string_numbers.push_back(std::to_string(n)); });
今は1から始まり、必要な桁数をチェックします:
size_t digits = 1;
while(true) {
各繰り返しで、unordered_set
0123を作成します。番号ごと
std::unordered_set<std::string> partials;
、我々がセットにそれのdigits
数字を配置しようとします:セットのサイズは、ベクトルの大きさであれば
for(const auto &s: string_numbers) {
if(s.size() <= digits) {
std::cout << "not unique" << std::endl;
return 0;
}
partials.insert(s.substr(0, digits));
}
、我々は終わった:
if(partials.size() == numbers.size()) {
std::cout << digits << " required" << std::endl;
return 0;
}
そうでなければ、我々は、桁数を増やす必要があります。
++digits;
}
}
全コード:
#include <unordered_set>
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
const std::vector<int> numbers{50234, 50356, 50454, 50934};
std::vector<std::string> string_numbers;
std::for_each(std::begin(numbers), std::end(numbers), [&](int n){ string_numbers.push_back(std::to_string(n)); });
size_t digits = 1;
while(true) {
std::unordered_set<std::string> partials;
for(const auto &s: string_numbers) {
if(s.size() <= digits) {
std::cout << "not unique" << std::endl;
return 0;
}
partials.insert(s.substr(0, digits));
}
if(partials.size() == numbers.size()) {
std::cout << digits << " required" << std::endl;
return 0;
}
++digits;
}
}
本当に番号を確認する必要はありませんか? '502123456789'と' 503123456789'には、後ろから同じ数字がたくさんありますが、数字は異なります。 – NathanOliver
illogicのロジックがありません – Raindrop7
私はC++を初心者にしており、初心者にはぴったりです。番号を確認する必要はありません。私はちょうどそれが後ろから正面への番号のあらゆる位置を通過するようにしたい。数字が似ていない数字は破棄し、数字が似ていない数字の位置に達すると停止することができます。それは理にかなっていますか? :/ – Mitrani