题目:输入N个数找到前k个小的数,并全部从小到大输出(有重复数字)比如我输入1122244567这些数,求前三小,则输出:1122244
#include<stdio.h>
int main()
{
int i=1,j=1,k,min=1,left,N,t,q;
int a[100];
int c[100];
int n[100];
printf("所需输入数字的个数:\n");
scanf("%d",&N);
printf("请输入各个数:\n");
for(i=1;i<=N;i++)
scanf("%d",&a[i]);
printf("请输入需要找几个最小数:\n");
scanf("%d",&k);
for(i=1;i<=k;i++)
n[i]=0;
for(i=1;i<=N;i++)
{
if(a[i]<a[min])
{
min=i;
n[k]=1;
}
if(a[i]==a[min])
n[k]++;
}
c[k]=a[min];
t=min;
q=k;
k--;
while(k!=0)
{
left=t;
for(i=1;i<=N;i++)
{
if(a[i]>a[left])
break;
}
t=i;
for(i=1;i<=N;i++)
{
if(a[i]<a[t] && a[i]>a[left])
{
t=i;
n[k]=1;
}
if(a[i]==a[t])
n[k]++;
}
c[k]=a[t];
k--;
}
for(i=1;i<=q;i++)
{
for(j=1;j<=n[i];j++)
printf("%d",c[q-i+1]);
}
printf("\n");
return 0;
}
#include <stdio.h>
int main()
{
int i = 1, j = 1, k, min = 1, left, N, t, q;
int a[100];
int c[100];
int n[100];
printf("所需输入数字的个数:\n");
scanf("%d", &N);
printf("请输入各个数:\n");
for (i = 1; i <= N; i++)
scanf("%d", &a[i]);
printf("请输入需要找几个最小数:\n");
scanf("%d", &k);
for (i = 1; i <= k; i++)
n[i] = 0;
for (i = 1; i <= N; i++)
{
if (a[i] < a[min])
{
min = i;
n[k] = 1;
}
else if (a[i] == a[min])////这里改成else if
n[k]++;
}
c[k] = a[min];
t = min;
q = k;
k--;
while (k != 0)
{
left = t;
for (i = 1; i <= N; i++)
{
if (a[i] > a[left])
break;
}
t = i;
for (i = 1; i <= N; i++)
{
if (a[i] < a[t] && a[i] > a[left])
{
t = i;
n[k] = 1;
}
else if (a[i] == a[t])//这里改成else if
n[k]++;
}
c[k] = a[t];
k--;
}
for (i = 1; i <= q; i++)
{
for (j = 1; j <= n[q - i + 1]; j++)//这里改成n[q - i + 1]
printf("%d", c[q - i + 1]);
}
printf("\n");
return 0;
}
建议排序后,直接打印前n个数
这是先排序版的
#include<stdio.h>
int main()
{
int i=1,j=1,k,min=1,left,N,t,q;
int a[100];
int c[100];
int n[100];
printf("所需输入数字的个数:\n");
scanf("%d",&N);
printf("请输入各个数:\n");
for(j=0; j<N; j++)
scanf("%d",&a[j]);
printf("请输入需要找几个最小数:\n");
scanf("%d",&k);
t=N-1;
while(t)//进行n-1次排序
{
j=0;
while(j<t)//一次排序判断n-1次,最多交换n-1次
{
if(a[j]>a[j+1])
{
int tem=a[j];
a[j]=a[j+1];
a[j+1]=tem;
flag=1;
}
j++;
}
--t;
}
for(j=0; j<k; j++)
{
printf("%d",a[j]);
}
printf("\n");
return 0;
}