C ++如何检查所有数组元素是否相等/不同?另外如何显示至少使用过1次的所有不同元素?

时间:2016-02-20 15:06:10

标签: c++ arrays sorting

如何检查所有数组元素是否相等? 例如:
1 2 3
退出:没有 例2:
2 2 2 2
退出:是
我写了这个,但它总是显示" NO" :

# include < iostream >    
using namespace std;    
int main(){    
int n , a[ n ] , i;    
cin>>n;    
cout<< endl;    
for(i=0 ; i<=n-1 ; i++)    
{    
     cin>>a[ i ];    
}  
if (a[ i ]! = a[ i + 1 ]) {cout<<"NO";}    
else {cout<<"YES";}    
return 0;    
}    

第二个节目:
例如:
1 2 2 5 7 2 9 1 5 8
退出:1 2 5 7 8

我必须使用Selection Sort,Bubble Sort或Insertion来对程序进行排序 谢谢你:)。

1 个答案:

答案 0 :(得分:0)

n未初始化时,您无法制作范围为n的数组。

int n , a[ n ] , i;    
cin>>n;    

此外,您当前在if语句中使用值i的{​​{1}}。那样不行。您正在访问刚刚在数组中输入的值以外 - 更糟糕的是 - 在数组边界之外。

你需要一个循环来检查:

n

但是,在C ++中,使用标准容器而不是旧的C风格数组要容易得多。像这样使用int main(){ int n , i; cin>>n; int a[n]; // n must be initialized first cout<< endl; for(i=0 ; i<=n-1 ; i++) // Read in array values { cin>>a[ i ]; } for(i=0 ; i<=n-2 ; i++) // Check array value in a loop. Notice: i <=n-2 { if (a[i] != a[i+1]) { cout << "NO"; return 0; } } cout << "YES"; return 0; } vector

set

最后请注意#include <iostream> #include <set> #include <vector> using namespace std; int main(){ int n , i; vector<int> a; // Use vector instead array to hold the data set<int> unique; // Use set for finding unique values as a set // can only hold a specific value one time cin >> n; for(i=0 ; i<n ; i++) { int tmp; cin >> tmp; a.push_back(tmp); // Put value into vector unique.insert(tmp); // Put value into set } if (unique.size() == 1) { cout << "YES" << endl; } else { cout << "NO" << endl; } cout << "Unique value:" << endl; for (auto v : unique) { cout << v << endl; } return 0; } 不用于解决您的问题。 vector就足够了。我使用了set,以便输入数据仍保存在某处,以防您需要使用它进行更多操作 - 如果没有,您可以删除vector部分。

对于你的第二个项目:

Google:“wiki bubble sort”,你会发现https://en.wikipedia.org/wiki/Bubble_sort

附带伪代码和所有。