我正在尝试在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;
}
问题是它适用于给定间隔内的所有数字,但是当我尝试提交它时输出错误:(。您对该程序可能出现的问题有什么想法吗?
答案 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;
}