关于歧义排列的代码问题
Code issues regarding Ambiguous Permutations
考虑这个问题:歧义排列。我的代码是用 c++ 11使用g++ 4.7.2编写的
#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 Ambiguousn";
break;
}
}
if(c==true)
cout << "Ambiguousn";
}
return 0;
}
只要在换行符中输入每个数字,这段代码就可以正常工作。如果我开始提供由空格分隔的输入(用于排列),那么代码的行为会出乎意料。它要求条件while((cin>> num)的无效输入,并在一轮输入后退出。对于解决这个问题有什么建议吗?我也想知道如果使用STL数组将是一个很好的选择。谢谢!
您的输入不正确,特别是这里-
while((cin >> num) && (h!=0)) //WRONG!
{
arr.push_back(num);
--h;
}
一个更清晰(因此没有bug)的方法是-
for (int i = 0; i < h; i++)
{
cin >> num;
arr.push_back(num);
}
第二个问题-
我也想知道使用STL数组是否是一个好的选择。
我建议在这里使用std::vector
(大多数情况下)。
您的代码有问题。1. 你应该用h!=1当你得到每个排列的数字时,在你目前的实现中,这很奇怪,如果h =4,你要问5个数字,这是没有意义的2. 您当然可以在一行中读取每个测试用例的数字,用空格分隔,如下所示:
#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 >> std::skipws >> num) && (h!=1))
{ //^^^^^^^^^^^^^(add this) ^^^^^^^here should be 1 not 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 Ambiguousn";
break;
}
}
if(c==true)
cout << "Ambiguousn";
}
return 0;
}
然而,在这两种情况下,你的结果都是不正确的,它输出如下:
4
1 4 3 2
Not Ambiguous
5
2 3 4 5 1
Not Ambiguous
1
1
Ambiguous
虽然第一个应该是"Ambiguous",但您可能需要检查检查歧义的逻辑
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 代码在main()中运行,但在函数中出现错误
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 编译包含字符串的代码时遇到问题
- 我在c++代码中生成了一个运行时#3异常
- 如何在linux终端中同时编译和运行c++代码
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 为什么不;名字在地图上是按顺序排列的吗
- 在Linux for Windows上编译C++代码时出错
- 我的字符计数代码计算错误.为什么
- 孤立代码块在结构中引发异常
- 添加气泡排序代码以排列列表
- 为什么这段代码没有生成所有的排列?
- 重新排列代码行时未引发错误"Double free or corruption"
- C++编码代码 青蛙河一号在大型排列测试中失败
- 在不同的标头中排列与模板相关的代码
- LLVM clang编译器优化器以一种非常奇怪的方式重新排列代码,该怎么做
- 关于歧义排列的代码问题
- 在C和c++中声明和排列代码的习惯