C语言一组数找出出现奇数次,c语言 给定一个长度为n的序列,序列满足,只有一个数出现了奇数次,其他的都出现偶数次,请找出这个数...

满意答案

00e27ab806e4881f8254fe7ae8741834.png

oliyeoliye

2014.05.01

00e27ab806e4881f8254fe7ae8741834.png

采纳率: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分享举报

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值