-2

你到底是如何格式化这个来排列的,我尝试了一切,没有任何改变?!

printf("N Count\n");
printf("---- ------ \n");

for(i = 0 ; i < MAX_ELEMENTS ; i++)
{
    count = getOccur(arr, MAX_ELEMENTS, arr[i]);
    printf("%1d %1d\n", arr[i], count);
}

我试过制表符,间距,那些带有最后一个数字的 % 符号,它不会从这个改变

N  Count
----- ---
       1      1
       2      1
       3      1

快把我逼疯了!我不明白!哈哈

编辑整个程序新问题!

#include <stdio.h>

#define MAX_ELEMENTS 10


int getOccur(int a[], int num_elements, int value);
void printArr(int a[], int num_elements);

int main()
{
    int arr[MAX_ELEMENTS];
    int trim[MAX_ELEMENTS];
    int count, target, i;
    int j, k, temp;

    for(i = 0 ; i < MAX_ELEMENTS ; i++)
    {
        printf("Enter a variable for the array: ");
        scanf("%d", &arr[i]);
    }

    for (j = 1 ; j <= MAX_ELEMENTS-1 ; j++)
    {
        for(k = 0 ; k <= MAX_ELEMENTS-2 ; k++)
        {
            if(arr[k] > arr[k+1])
            {
                temp = arr[k];
                arr[k] = arr[k+1];
                arr[k+1] = temp;
            }
        }
    }

    printf("%4s %6s\n", " N ", "Count");
    printf("%4s %6s\n", "----", "------");

    for(i = 0 ; i < MAX_ELEMENTS ; i++)
    {
        count = getOccur(arr, MAX_ELEMENTS, arr[i]);
        printf("%3d %4d\n", arr[i], count);
    }
}

int getOccur(int a[], int tally, int value)
{
    int i;
    tally = 0;

    for( i = 0 ; i < MAX_ELEMENTS ; i++)
    {
        if (a[i] == value)
        {
            ++tally;
        }
    }

    return(tally);

}

void printArr(int a[], int amount)
{
    int i;

    for(i = 0 ; i < amount ; i++)
    {
        printf("%d ", a[i]);
    }

    printf("\n");
}    
4

2 回答 2

1
printf("%4s %6s\n", " N ", "Count");
printf("%4s %6s\n", "----", "------");

for(i = 0 ; i < MAX_ELEMENTS ; i++)
{
  count = getOccur(arr, MAX_ELEMENTS, arr[i]);
  printf("%4d %6d\n", arr[i], count);
}    

应该把所有东西都排好。

编辑

针对评论中的问题,我的方法是首先在其中找到所有唯一值arr并将它们保存到不同的数组中(调用它unique)。然后,您将遍历unique循环中的数组:

for (i = 0; i < uniqueCount; i++)
{
  count = getOccur(arr, MAX_ELEMENTS, unique[i]);
  printf("%4d %6d\n", unique[i], count);
}

至于寻找独特的元素,蛮力方法就像

size_t uniqueCount = 0;
int unique[MAX_SIZE];   // needs to be same size as original array in case
                        // all values are unique

for (i = 0; i < MAX_SIZE; i++)
{
  size_t j = 0;
  for (j = 0; j < uniqueCount; j++)
    if (arr[i] == unique[j])
      break;

  if (j == uniqueCount)
    unique[uniqueCount++] = arr[i];
}

对于原始数组中的每个元素,我们扫描(最初为空的)unique数组。a[i]如果我们在数组中找不到 的值unique,我们将其添加并递增uniqueCount

请注意,此方法效率非常低,并且随着 MAX_ELEMENTS 变大,效果会很差。有更好的解决方案可用,但听起来你仍处于学习曲线的底部,所以我将保留它。

于 2013-02-14T11:42:59.143 回答
0

这就是你要找的。第一列有四个 - 所以最小宽度是四,下一列有大小 - 所以最小宽度是格式字符串中指定的 6。请参阅printf手册页

printf("N    Count\n");
printf("---- ------ \n");

for(i = 0 ; i < MAX_ELEMENTS ; i++)
{
  count = getOccur(arr, MAX_ELEMENTS, arr[i]);
  printf("%4d %6d\n", arr[i], count);
}

编辑

先编辑printf

于 2013-02-14T11:15:19.957 回答