この質問を考えてみましょう: Ambiguous Permutation . 私のコードはG++ 4.7.2 を使用して C++11で書かれています
#include<iostream>
#include<vector>
using std::cin;
using std::cout;
using std::vector;
int main()
{
int h;
while((cin >> h) && (h!=0))
{
int num;
bool c=true;
vector<int> arr;
while((cin >> num) && (h!=0))
{
arr.push_back(num);
--h;
}
const auto n = arr.size();
for(int i=0; i!=n; ++i)
{
if(arr[arr[i]-1] != (i+1))
{
c = false;
cout << "Not Ambiguous\n";
break;
}
}
if(c==true)
cout << "Ambiguous\n";
}
return 0;
}
このコードは、改行にすべての数字を入力する限り正常に機能します。(順列のために) 空白で区切られた入力を提供し始めると、コードは予期しない動作をします。条件 while((cin >> num) に対して無効な入力を要求し、1 回の入力後に終了します。この問題を解決するための提案はありますか? また、STL 配列を使用するのが良い選択であるかどうかも疑問に思っていました。ありがとう!