mid.cpp

来自「在一维空间上」· C++ 代码 · 共 104 行

CPP
104
字号
#include <stdio.h>
#include <stdlib.h>

int x[] = {1, 3, 8, 22,97, 99, 100, 153, 180, 182, 185, 201, 213};
struct pair
{
	int x1;
	int x2;
};
typedef struct pair pair_t;
void get_min (int x[], int n, pair_t *res);
int comp (pair_t *res1, pair_t *res2, pair_t *res3, pair_t *res);

int main (void)
{
	int i;
	printf ("x[%d] = ", sizeof (x)/sizeof (int));
	for (i = 0; i < sizeof (x)/sizeof (int); i++)
	{
		if (i == 6)
			printf ("\n");
		printf (" %d ", x[i]);
	}
	printf ("\n");

	pair_t res;
	get_min (x, sizeof (x)/sizeof (int), &res);


	return 0;
}
void show_x (int x[], int n)
{
	int i;
	printf ("x[] = ");
	for (i = 0; i < n; i++)
	{
		printf ("%d ", x[i]);

	}
	printf ("\n");
}
void show_pair (pair_t *res)
{
	printf ("pair = ( %d, %d)\n", res->x1, res->x2);
}
void get_min (int x[], int n, pair_t *res)
{
	if (n <= 1)
	{
		printf ("error\n");
		
		return;
	}
	if (n == 2)
	{
		res->x1 = x[0];
		res->x2 = x[1];

		return;
	}
	if (n == 3)
	{
		if ((x[1] - x[0]) < (x[2] - x[1]))
		{
			res->x1 = x[0];
			res->x2 = x[1];
		}
		else
		{
			res->x1 = x[1];
			res->x2 = x[2];
		}

		return;
	}
	pair_t res1, res2, res3;
	int d = n/2 -1;
	res3.x1 = x[d];
	res3.x2 = x[d + 1];
	get_min (&x[0], n/2, &res1);
	get_min (&x[d + 1], n - n/2, &res2);
	
	printf ("n = %d\n", n);
	show_pair (&res1);
	show_pair (&res2);
	show_pair (&res3);
	comp (&res1, &res2, &res3, res);
	//show_pair (res);
}
int comp (pair_t *res1, pair_t *res2, pair_t *res3, pair_t *res)
{
	pair_t *temp \
		= (res1->x2 - res1->x1) <= (res2->x2 - res2->x1) ? res1 : res2;
	temp \
		= (temp->x2 - res->x1) <= (res3->x2 - res3->x1) ? temp : res3;
	printf ("x1 = %d, x2 = %d\n", temp->x1, temp->x2);

	res->x1 = temp->x1;
	res->x2 = temp->x2;

	return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?