#include<iostream>
#include<string>
using namespace std;
int main()
{
long int n;
while (cin >> n && n != 0)
{
cin.get();
string* a = new string[2 * n - 1];
int* flag = new int[2 * n - 1]();
for (int i = 0; i < 2 * n - 1; i++)
{
getline(cin, a[i]);
}
for (int i = 0; i < 2 * n - 1; i++)
{
for (int j = 0; j < 2 * n - 1; j++)
{
if (a[i] == a[j] )
{
flag[i] += 1;
}
}
}
for (int i = 0; i < 2 * n - 1; i++)
{
if (flag[i] %2!= 0)
{
cout << a[i]<<endl;
goto out;
}
}
out:
continue;
}
return 0;
}
不能理解为什么自己测试数据的时候都没问题,提交的时候动态检测却没有输出结果,麻烦找下错。。
第10行去掉cin.get();每次输入直接cin >> a[i];
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!#include <stdio.h>
int H(int k){
int x;
x=k%19;//除留余数法 19为最接近表长的素数
return x;
}
int HashSearch1(int ht[ ], int k, int *p) /*形参p传指针,返回位置*/
{
int i, j, flag = 0; /*flag=0表示散列表未满*/
j = H(k); /*计算散列地址*/
i = j; /*记载比较的起始位置*/
while (ht[i] != -1 && flag == 0)
{
if (ht[i] == k)
{ /*比较若干次查找成功*/
*p = i;
return 1;
}
else
i = (i + 1) % 20; /*向后探测一个位置*/
if (i == j)
flag = 1; /*表已满*/
}
if (flag == 1)
{
return -1;
} /*表满,产生溢出*/
else
{ /*比较若干次查找不成功,插入*/
ht[i] = k;
*p = i;
return 0;
}
}
int InitHashTable(int ht[ ],int x)
{
int i,j,flag=0;//flag标记表是否满
i=H(x);
j=i;
if(ht[i]==-1){
ht[i]=x;
return 0;
}
else{
while (ht[i] != -1 && flag == 0)//寻找x应该存储的位置
{
i = (i + 1) % 20; /*向后探测一个位置*/
if (i == j)
flag = 1; /*表已满*/
}
if (flag == 1)
{
return -1;
} /*表满,产生溢出*/
else
{ /*比较若干次查找不成功,插入*/
ht[i]=x;
return 0;
}
}
}
int main()
{
int ht[20];//散列表表长为20
for(int t=0;t<20;t++){
ht[t]=-1; //将散列表初始化为-1
}
int p;
int x,i;
printf("请输入散列表中的原始数据,以-1010停止\n");
scanf("%d",&x);
while(x!=-1010){
i=InitHashTable(ht,x);
if(i==-1){
printf("表已满,溢出\n");
break;
}
scanf("%d",&x);
}
printf("请输入要查找的元素,以-1010停止\n");
scanf("%d",&x);
while(x!=-1010){
i=HashSearch1(ht,x,&p);
if(i==-1){
printf("表已满,溢出\n");
}
else if(i==1){
printf("查找成功,在散列表中的第%d位\n",p+1);
}
else{
printf("查找失败,已插入,在散列表中的第%d位\n",p+1);
}
scanf("%d",&x);
}
return 0;
}