1

任务是:

  • 有2个数组A(数值浮点型),B是一个字符数组。A 填充有随机数。
  • A[i]表示与 B 数组中的第 i 个字符相关联的第 i 个值。也就是说,每个唯一的 Ai 都映射/关联到一个唯一的 Bi。因此,如果有相似的 Ai,那么它们中的每一个都将依次与 B 中的相同字符相关联。
  • 现在,有一个New_A由随机数填充的新数组,这些随机数可能与 A 的随机数略有不同,或者少数数字可能完全相同。任务是根据以下假设创建一个字符数组 New_B:
  • 我们找到最小的欧几里得距离或 和 之间的任何度量New_A[j]A[i]使得给定 a New_A[j],来自 B 的字符被分配 where A[i] >=New_A[j]( New_A[i] >= A[j])。让表示条件成立small_A的最小值的索引 j 。A[j]
  • 例如,假设与 A[2] 关联的字符是 'd' 并且 A[2]=12.1 的值和 New_A[7]=11.9 的值。因为, A[2]> New_A[7],New_A[7] 被映射/关联到最初与 A[2] 关联的字符,即字符 'd' ;该条件不成立的其余部分保持不变。因此,总体效果/目标是根据New_A和A将字符数组B的变体创建成新的字符数组New_B。

现在,这就是我卡住的地方。如何找到最小的欧几里得值,然后如何根据条件分配 B 的字符。此外,数组的数据类型不同,如何进行关联。二维数组的使用纯属猜测,不能保证我是正确的。

float A[10];
char B[10] = {'c','d','e','f','g','h','i','j','k','l'} ; 

for (i = 1; i <= 10; i++) {
  Val_A[i] = rand(); 
  Val_New[i] = rand();
  A[i] = Val_A[i]; 
  New_A[i][j] = Val_New[i]; 
}

max1 = New_A[0];
index1 = 0; 
for (i = 1; i < 10; i++) {
  if (A[i] > max1)
    extract_char = B[i];  
  New_A[i][j] = extract_char;  
  //assigning corresponding character to New_A, which was assigned earlier to A   
  index1 = i;
}
4

1 回答 1

0

首先,标量的欧几里得距离只是说“差异的绝对值”的一种奇特方式,例如 fabs(ab)

对于 New_A 中的每个元素“i”:

  1. 在 A 中找到具有最小欧几里得距离的索引为“minA”的元素
  2. 将 New_B[i] 设置为 B[minA]

第一步:

int findminA(float A[], int sizeA, float compare)
{
  int i;
  int minA=0;
  float best=abs(a[0]-compare);
  for(i=1;i<sizeA;++i) {
    if(fabs(A[i]-compare)<best) {
       best=fabs(A[i]-compare)
       minA=i;
  }
  return i;
}

这将为您提供具有最小欧几里德距离的索引(对于 A 和 B)。

于 2012-08-01T23:38:12.447 回答