m0_63070293 2021-12-22 09:52 采纳率: 50%
浏览 148
已结题

(仅限12.22急)帮我在本来的代码上改一下,不用排序

题目:输入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;
}

img

img

  • 写回答

3条回答 默认 最新

  • 南七灵 2021-12-22 11:18
    关注
    
    #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;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 12月30日
  • 已采纳回答 12月22日
  • 修改了问题 12月22日
  • 修改了问题 12月22日
  • 展开全部

悬赏问题

  • ¥15 如何使用simulink建立一个永磁同步直线电机模型?
  • ¥30 天体光谱图的的绘制并得到星表
  • ¥15 PointNet++的onnx模型只能使用一次
  • ¥20 西南科技大学数字信号处理
  • ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
  • ¥30 STM32 INMP441无法读取数据
  • ¥15 R语言绘制密度图,一个密度曲线内fill不同颜色如何实现
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗