给定一个整数数组,其中除了(两个)数字之外,其他数字都出现了(两次)。编写一个C++程序来找到这(两个)只出现一次的数字
【样例输入】
1 2 4 4 5 1
【样例输出】
只出现一次的数字是:2,5
小知识:输入一个不定长度的数组,直到遇到换行符表示数组结束
拓展另一个方法:
while (cin >> temp) /使用while循环从标准输入读取整数,直到遇到换行符为止
{
a[n++] = temp; //是更新索引n,以便下一次循环时可以读取新的整数
if (cin.get() == '\n')break;
}
#include <iostream>
using namespace std;
int main()
{
int i = 0, time, count = 0, result, temp;
int a[100], aa[100];
char b = 0;
while (b != '\n')//输入一个不定长度的数组:直到按下回车键(换行符)表示输入数组结束
{
scanf("%d%c", &temp, &b);//整数赋值给temp,字符赋值给b
a[i] = temp;//将读取到的整数存储到数组a的第i个位置
i++;//是更新索引i,以便下一次循环时可以读取新的整数
}
for (int n = 0; n < i; n++)//这里最后的i表示输入数组的长度
{
time = 0;
for (int m = 0; m < i; m++)//再次遍历数组,检查当前元素a[n]出现了多少次,次数用time的值表示
{
if (a[n] == a[m])
time++;
}//如果x大于1,就说明a[n]在数组a中出现了两次或更多次。每当找到一个与a[n]相等的元素时,x就会加1
if (time == 1)
{//把a数组中只出现了一次的元素存储到aa数组
aa[count] = a[n];
count++;//是更新索引count,以便下一次循环时可以存储新的整数
}
}
cout << "只出现一次的数字是:";
for (result = 0; result <count; result++)
{//这里的count已经是++后的,表示数组长度,所以下面if里要count-1表示最后一个元素的下标
cout << aa[result];
if (result != count - 1)//有两个及以上数字的话用逗号隔开
cout << ",";//易错:你需要在最后一个元素之前打印逗号,而不是在第一个元素之后。所以不能写成if (result > 1)
}
return 0;
}
运行结果如图