2011-04-17 45 views
0

这里我有一些问题需要在C代码中分组。以下是我的C代码:如何分成两组?

#include <stdio.h> 
#include <stdlib.h> 
#include <math.h> 

int main(){ 
int inp; 
inp = 15; 

signed int cx[15], cy[15]; 
cx[0] = 1; 
cx[1] = 7; 
cx[2] = -2; 
cx[3] = -3; 
cx[4] = -2; 
cx[5] = -2; 
cx[6] = -10; 
cx[7] = 0; 
cx[8] = -1; 
cx[9] = 8; 
cx[10] = 9; 
cx[11] = 10; 
cx[12] = -7; 
cx[13] = 12; 
cx[14] = 11; 

cy[0] = -8; 
cy[1] = -1; 
cy[2] = -10; 
cy[3] = -8; 
cy[4] = -6; 
cy[5] = -10; 
cy[6] = 12; 
cy[7] = 0; 
cy[8] = 5; 
cy[9] = -1; 
cy[10] = 13; 
cy[11] = -10; 
cy[12] = 3; 
cy[13] = 13; 
cy[14] = 0; 

int j; 
printf ("\n Input (x,y) :\n\n"); 
for (j=0; j<inp; j++){ 
printf (" X%d :(%d,%d)\n",(j+1),cx[j],cy[j]);} 

printf ("\n Initial value of 2 centers :\n"); 
printf ("\n Y1 = X1 : (%d,%d)\n",cx[0],cy[0]); 
printf (" Y2 = X2 : (%d,%d)\n",cx[1],cy[1]); 

printf ("\n Objects-centers distance :\n\n"); 
for(j=2; j<inp; j++){ 
float dis1, dis2; 
dis1 = sqrt((cx[j]-cx[0])*(cx[j]-cx[0])+(cy[j]-cy[0])*(cy[j]-cy[0])); 
dis2 = sqrt((cx[j]-cx[1])*(cx[j]-cx[1])+(cy[j]-cy[1])*(cy[j]-cy[1])); 
printf(" X%d -> Y1 : %.5f\t X%d -> Y2 : %.5f\n", (j+1), dis1, (j+1), dis2);} 

printf ("\n Objects gouping :\n"); 

} 

如何分成两组?第一组是最靠近第一中心点的点,第二组是离第二中心点最近的一点。

+0

这是很难读的。请缩进您的代码并在操作员之间使用空格。 – 2011-04-17 02:34:02

+0

我不明白你的意思是什么。你在问团体还是要点? – Gabe 2011-04-17 02:36:35

+0

我有15分,然后我宣布第一点和第二点为中心点。之后,我计算了其他点与中心点之间的距离。最后,我想分两组参考中心点。 – 2011-04-17 02:41:04

回答

0

有很多方法可以解决这个问题。

最简单的方法是简单地创建第三个数组,大小与前两个数组相同。每个元素对应于每个cx/cy对,和值将是0如果对更接近第一点和1如果它是更接近第二:如果你想看看点

int result[15] = {0,1,0}; // points 2-14 initialized to 0 

if (dis1 < dis2) 
    result[j] = 0; 
else 
    result[j] = 1; 

所以4更接近点0或点1,您只需检查值result[4]

+0

如何输入上面的代码? – 2011-04-17 03:25:05

+0

或者可以根据OP,他*中心点*不是真的固定! – SuperSaiyan 2011-04-17 03:58:26

+0

我需要输入这个代码吗?对不起,我真的很喜欢编程。我需要有人帮忙和监视我。 – 2011-04-17 03:58:43