我首先要说我是编程新手。我在编写C ++中另一个列表的不同数字列表时遇到问题。假设我有一个列表l1 = {1, 12, 2, 4, 1, 3, 2}
,我想创建一个新的列表,看起来像这样的l2 = {1, 12, 2, 4, 3}
...
这是我写的:
#include <iostream>
using namespace std;
int main() {
int l1[100], l2[100], length, length1 = 0, i, j, a = 0;
cin >> length; //set the length
for (i = 0; i < length; i++) {
cin >> l1[i]; //add numbers to the list
}
l2[0] = l1[0]; //added the first number manually
for (i = 0; i < length; i++) {
length1++;
a = 0;
for (j = 0; j < length1; j++) {
if (l1[i] != l2[j]) //this checks numbers in the second list
a = 1; // and if they aren't found a gets the value
} //1 so after it's done checking if a is 1 it
if (a == 1) //will add the number to the list, but if the
l2[j] = l1[i]; //number is found then a is 0 and nothing happens,
} // SUPPOSEDLY
for (j = 0; j < length1; j++) {
cout << l2[j] << " ";
}
}
此输出为
1 -858993460 12 2 4 1 3
,因此显然我做错了什么。我很欢迎您提出的任何建议,我不一定需要解决此问题,我只是想摆脱困境。非常感谢您抽出宝贵的时间回复此问题。
最佳答案
最重要的:此解决方案假设我们必须保留订单
好....
试试这个...
我已经稍微改变了标识符(当然这不会影响执行)
它只会帮助我们确定该变量的用途。
这是代码
#include <iostream>
using namespace std;
int main()
{
int Input[100], Unique[100], InSize, UniLength = 0;
cin >> InSize;
for (int ii = 0 ; ii < InSize ; ii++ )
{
cin >> Input[ii];
}
Unique[0] = Input[0];
UniLength++;
bool IsUnique;
for ( int ii = 1 ; ii < InSize ; ii++ )
{
IsUnique=true;
for (int jj = 0 ; jj < UniLength ; jj++ )
{
if ( Input[ii] == Unique[jj] )
{
IsUnique=false;
break;
}
}
if ( IsUnique )
{
Unique[UniLength] = Input[ii];
UniLength++;
}
}
for ( int jj = 0 ; jj < UniLength ; jj++ )
{
cout << Unique[jj] << " ";
}
}
您正在将Unique元素插入到新数组的原始索引中.....并代替那些重复的元素....您没有进行任何形式的转换..即它们未初始化.. 。并给出类似
-858993460
的内容我很欣赏上面提到的两个答案,但是再次.....我认为这个问题放在了hackerrank ....上,
unqiue_array()
在这里不起作用.....添加
当然,我们只能将“唯一”元素添加到我们的Input数组中.....但是...此解决方案有效.....此外,我们有2秒的执行时间限制....而且只有100个元素....请记住....大哦表示法对很大的输入都适用....在这里不是这种情况....所以看时间复杂度真的没有意义.......我在说什么我会选择易于理解的算法。
我希望这是您想要的...
祝你今天愉快。
关于c++ - C++中的不同数字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25587998/