c程序:给出A,B,C寻找中位数

c程序:给出A,B,C寻找中位数,第1张

没有包含头文件conio.h,

还有倒数第三行改为printf("%d\n",zws(a,b,c))

#include<conio.h>

#include<stdio.h>

int zws(int a, int b, int c){

int ans

if (a >= b &&a <= c) ans = a

if (a <= b &&a >= c) ans = a

if (b >= a &&b <= c) ans = b

if (b <= a &&b >= c) ans = b

if (c >= a &&c <= b) ans = c

if (c <= a &&c >= b) ans = c

return ans

}

int main()

{

int a, b, c

printf("please input 3 integar:")

scanf("%d %d %d", &a, &b, &c)

printf("%d\n",zws(a, b, c))

getch()

}

数组排序可以不用指针。你把数组定义成全局变量,比如说a[10001]然后调用我给你的快排程序就行了,这个程序可以背下来,很有用的。

void

qs(int

L,int

R)

{

int

i=L,j=R,mid=a[(L+R)/2],t

while(i<j)

{

while(a[i]<mid)

++i

while(a[j]>mid)

--j

if(i<=j)

{

t=a[i]

a[i]=a[j]

a[j]=t

++i

--j

}

}

if(i<R)

qs(i,R)

if(L<j)

qs(L,j)

}

排好序之后找中位数就好办了。

至于众数,我觉得最好的方法是用bfs。但这个对你来说难度有点大,我就给你写一个hash表吧。还用上面的那个数组,且假定数组a中的最大值不超过10000,若超过,你把下面这个hash数组的范围扩大就行了。

另外,设a中有n个元素,a从1开始计数(若从0开始,你改一下就好了)

int

hash[10001]={0}

int

i,Max=0

for(i=1

i<=n

++i)

{

++hash[a[i]]

if(hash[a[i]]>hash[Max])

Max=a[i]

}

最后输出Max就好了

刚t415422663倒是提醒我了,如果要判断众数有多个,我可以把上面的程序稍改一下

int

hash[10001]={0}

int

i,Max=-1/*注意,这里把Max赋值为-1是为了防止数组a的元素个数为0时所有数据都被输出*/

for(i=1

i<=n

++i)

{

++hash[a[i]]

if(hash[a[i]]>Max])

Max=hash[a[i]]

}

//10000是数组a中可能出现的最大值,这个你可以自己改的

for(i=1

i<=10000

++i)

if(hash[i]==Max)

printf("%d\n",i)

#include <stdio.h>

void swap(int *p,int *q) {

int t

t=*p

*p=*q

*q=t

}

void sort(int a[],int n) {

int i,j,temp

for(i=0i<n-1i++) {

for(j=0j<n-i-1j++) {

if(a[j]>a[j+1])

swap(&a[j],&a[j+1])

}

}

}

int main() {

int a[] = {6,3,8,5,1}

int n = 5

int sum,i

sort(a,n)

n = (n+1) / 2 - 1 // -1 as array indexing in C starts from 0

printf("Median = %d ", a[n])

return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11338803.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存