创建一个茎叶图

时间:2015-11-25 22:45:30

标签: c arrays algorithm for-loop

我正在尝试在C语言(用于学校目的)中创建一个程序,该程序从区间[0,99]读取数字,并在它们的行尾开始使用数十个词干图表,然后是所有单位。

以下是输入示例:

  

1 2 5 2 25 27 93 4 93 93 58 51

并输出应为:

0 | 12245个
2 | 57个
5 | 18个
9 | 333

这是我的代码:

// uloha-9-5.c -- Tyzden 9 - Uloha 5
// Adam Kotvas, 18.11.2015 10:02:12

#include <stdio.h>

int main()
{
  int n[100],i=0,j=0,l=0,desiatky[10],temp=0,k=0;
  while(scanf("%d",&n[i])>0)
  {
    if(n[i]>99 || n[i]<0){
      continue;
    }
    i++;
  }

  for(j=0;j<=10;j++)
  {
    desiatky[j]=0;
  }
  for(j=0;j<i;j++)
  {
    desiatky[(n[j]/10)%10]=1;
  }
  for(k=0;k<i;k++)
  {
  for(j=0;j<i;j++)
  {
    if(n[j]>n[j+1] && j!=i-1)
    {
      temp=n[j];
      n[j]=n[j+1];
      n[j+1]=temp;
    }
  }
  }
  for(j=0;j<10;j++)
  {
    if(desiatky[j]==1)
    {
        printf("%d | ",j);
        for(l=0;l<i;l++)
        {
          if((n[l]/10)%10==j)
          printf("%d",n[l]%10);
        }
        printf("\n");
    }
  }
  return 0;
}

问题是它适用于给定间隔内的所有数字,但是当我尝试提交它时输出错误:(。您对该程序可能出现的问题有什么想法吗?

1 个答案:

答案 0 :(得分:0)

你的代码有点史诗。更重要的是:

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

int cmp(const void *av, const void *bv) { return *(int*)av - *(int*)bv; }

int main(void) {
  unsigned n[1000000], i = 0, x;
  while (scanf("%d", &x) == 1) if (x < 100) n[i++] = x;
  if (i == 0) return 0;
  qsort(n, i, sizeof n[0], cmp);
  unsigned k = 0;
  while (k < i) {
    unsigned d = n[k] / 10;
    printf("%d|", d);
    while (k < i && n[k] / 10 == d) printf("%d", n[k++] % 10);
    printf("\n");
  }
  return 0;
}