考虑这个问题:歧义排列。我的代码是使用 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) 的输入无效,并在一轮输入后退出。有什么建议可以消除这个问题吗?我还想知道使用STL 数组是否是一个不错的选择。谢谢!