在此提供三种解法,其实三种解法殊途同归,不就是排个序,去个重就好!
1.利用map特点,插入map之后,会自动根据关键字排序,而且不会出现相同的关键字,正好满足特性
#include<iostream>
#include<map>
using namespace std;
int main()
{
map<int, int> in;
int num, temp;
cin >> num;
for (int i = 0; i<num; i++)
{
cin >> temp;
in[temp]++;
}
for (map<int, int>::iterator iter=in.begin(); iter != in.end(); iter++)
{
cout << iter->first << endl;
}
return 0;
}
2.因为给出数据不会大于1000所以,所以我们用一个大小为1000的数组存储输入数,数组值存储出现个数,我们要去重,只要输出数组值大于0的下标就好!
#include<iostream>
using namespace std;
int main()
{
int hash[1001], count, num;
memset(hash, 0, sizeof(int)* 1001);
cin >> count;
for (int i = 0; i<count; i++)
{
cin >> num;
hash[num]++;
}
for (int i = 1; i <= 1000; i++)
{
if (hash[i]>0)
{
cout << i << endl;
}
}
return 0;
}
3.将输入数据排序,那么重复的数字肯定是连续的,所有我们在输出的时候进行过滤就好
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int stack[100], count, num,j,k;
cin >> count;
for (int i = 0; i < count; i++)
{
cin >> num;
stack[i] = num;
}
sort(stack, stack + count);
for (j = 0, k = 0; k < count;)
{
if (stack[j] == stack[k])
{
k++;
}
else
{
cout << stack[j] << endl;
j = k;
}
}
cout << stack[count-1] << endl;
return 0;
}
很简单:
#include<iostream>
using namespace std;
int main()
{
char in[100];
gets_s(in);
int len = strlen(in);
int count = 0;
char temp;
cin >> temp;
for (int i = 0; i < len; i++)
{
if (in[i] == temp||in[i]==temp+32||in[i]==temp-32)
{
count++;
}
}
cout << count << endl;
return 0;
}