嗨,这是我的代码,找到三个中间数,但当我给a = 3 b = 2和c = 1时输出错误。我怎样才能找到正确的中间数?是否有任何数组方式? 谢谢
#include<stdio.h>
int main()
{
int a,b,c;
int min,mid,max,i=1;
printf("Enter number: ");
scanf("%d",&a);
printf("\nEnter number: ");
scanf("%d",&b);
printf("\nEnter number: ");
scanf("%d",&c);
if(((a<b)&&(b<c)) || ((a>b)&&(a<c)))
{
min=a;
mid=b;
max=c;
}
if(((b<a)&&(a>c)) || ((a>b)&&(a<c)))
{
min=c;
mid=a;
max=b;
}
if(((c<a)&&(c>b)) || ((c>a)&&(c<b)))
{
min=b;
mid=c;
max=a;
}
printf("\nMid is %d",mid);
for(i=min;i<=max;i++)
{
if(i==mid)
continue;
printf("\n%d",i);
}
getchar();
getchar();
}
答案 0 :(得分:1)
为了让您的生活更轻松,请编写一个名为min
的函数。它需要两个整数并返回一个较小的整数。现在使用这个函数:
int min = min(min(a,b),c);
与max。相似
要获得中间值,只需进行此计算:
int mid = a + b + c - max - min;
答案 1 :(得分:1)
如果你有一个排序数组:
int nums[N];
然后:
对于N甚至中位数为:(nums[N/2] + nums[(N/2)-1])/2
对于N奇数,中位数为:nums[(N-1)/2]
如果您的数组未排序,请检查Median of Medians
答案 2 :(得分:0)
如果您能够找到最大值和最小值,您可以找到如下的中间值:
int a = 1, b = 2, c = 3;
int minVal = min(a, b);
int maxVal = max(maxVal, c);
int midVal = a + b + c - maxVal - minVal;
midVal应包含这3个数字的中间值。
答案 3 :(得分:0)
使用数组排序非常简单:
#include<stdio.h>
#include<errno.h>
#include<string.h>
#include<stdlib.h>
int compar( const void *a, const void *b)
{
return *(int*)a > *(int*)b;
}
void die(const char *msg)
{
if( errno )
fprintf(stderr, "%s: %s\n", strerror(errno), msg);
else
fprintf(stderr, "%s\n", msg);
exit(EXIT_FAILURE);
}
int get_input(void)
{
int ret;
errno = 0;
if( scanf("%d", &ret ) != 1 )
die("invalid input");
return ret;
}
void * xmalloc(size_t s)
{
void *ret;
ret = malloc(s);
if(ret == NULL)
die("malloc");
return ret;
}
int main(int argc, char **argv)
{
int *a;
int *b;
int count;
count = get_input();
a = b = xmalloc( count * sizeof *a);
while(count-- > 0)
*b++ = get_input();
qsort(a, b - a, sizeof *a, compar);
printf("sorted:");
while(a != b)
printf(" %d", *a++);
putchar('\n');
return EXIT_SUCCESS;
}
答案 4 :(得分:0)
int a,b,c;
if(b>a && a>c || c>a && a>b)
printf("The middle number is a");
else if(a>b && b>c || c>b && b>a)
printf("The middle number is b");
else
printf("The middle number is c");