满意答案
oliyeoliye
2014.05.01
采纳率:56% 等级:9
已帮助:817人
下面这段代码应该可以,你试试。
#include
#include
struct map
{
int num;
int count;
};
void main()
{
int get_odd(int array[],map mp[],int p);
int n=0;
int i=0;
int result;
int *a;
a = (int *)malloc(1000000*sizeof(int));
if(NULL==a) printf("no enough memory for a.
");
printf("input a number:");
scanf("%d",&n);
while(!(n>0 && n%2==1))
{
printf("
It is a wrong number,input again:");
scanf("%d",&n);
}
printf("
input the sequence:");
while(i
{
scanf("%d",&a[i]);
i++;
}
map *m;
m = (map *)malloc(n*sizeof(map));
if(NULL==m) printf("no enough memory for m.
");
result = get_odd(a,m,n);
printf("%d
",result);
free(a);
free(m);
}
int get_odd(int a[],map m[],int n) // find the odd one(s)
{
int k=0;
int i,j;
int add=1;
int result;
m[0].num=a[0];
m[0].count=1;
k=1;
for(i=1;i
{
add=1;
for(j=0;j
{
if(a[i]==m[j].num) {m[j].count++;add=0;}
}
if(add)
{
k++;
m[k-1].num=a[i];
m[k-1].count=1;
}
}
for(i=0,j=0;i
{
if(m[i].count%2==1) {result=m[i].num;j++;}
}
if(j!=1) {printf("bad sequence.
");return -1;} // more than one odd
else {return result;}
}
00分享举报