Pagini recente » Cod sursa (job #2517311) | Cod sursa (job #2847335) | Cod sursa (job #2898579) | Cod sursa (job #341822) | Cod sursa (job #1474133)
#include<stdio.h>
#include<malloc.h>
void merge(int *v,int l,int m,int r)
{
int *vp=(int*)malloc((r-l+1)*sizeof(int));//vetor intermediar
int i=l,j=m+1,k=0,s=0;
while(i<=m && j<=r)
{
if(v[i]<=v[j])
{
vp[k]=v[i];
i++;
}
else
{
vp[k]=v[j];
j++;
}
k++;
}
if(i>m)
for(s=j;s<=r;s++)
{
vp[k]=v[s];
k++;
}
else
for(s=i;s<=m;s++)
{
vp[k]=v[s];
k++;
}
for(s=0;s<=r-l;s++)
v[l+s]=vp[s];
free(vp);
}
void mergesort(int *v,int l,int r)
{
if(l==r) return;
int m=(l+r)/2;
mergesort(v,l,m);
mergesort(v,m+1,r);
merge(v,l,m,r);
}
int main()
{
int count=1;
FILE* f1,*f2;
f1=fopen("elmaj.in","r");
f2=fopen("elmaj.out","w");
if(!f1 || !f2)
{
printf("eroare deschidere fisier!\n");
return -1;
}
int n,*v,ok=0;
fscanf(f1,"%d",&n);
v=(int*)malloc(n*sizeof(int));
for(int i=0;i<n;i++)
fscanf(f1,"%d",&v[i]);
mergesort(v,0,n-1);
for(int i=0;i<n-1;i++)
{
if(v[i]==v[i+1])
count++;
else ok=1;
if(ok && count>=n/2+1)
fprintf(f2,"%d %d\n",v[i],count);
if(ok)
{
count=1;
ok=0;
}
}
free(v);
return 0;
}