注册 登录
编程论坛 C语言论坛

pta上有个测试点通不过,这个代码真的写了好长时间,求求大佬帮看看到底是哪里出错了

魂之子 发布于 2020-05-06 00:33, 2676 次点击


只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录
程序代码:
#include<stdio.h>
void bubbleSort(float arr[], int n)
{
    int i, j, tmp;
    for(i = 0; i < n - 1; i++)
    {
        for(j = 1; j < n; j++)
        {
            if(arr[j] < arr[j - 1])
            {
                tmp = arr[j];
                arr[j] = arr[j - 1];
                arr[j - 1] = tmp;
            }
        }
    }
}

int main(){
    int n,k,m;
    scanf("%d %d %d",&n,&k,&m);
    float stu[10001];
    int i;
    float temp[101];
    float sum=0;
   
    int j;
    for(j=0; j<n; j++){
        sum = 0;//&Ccedil;§&Iacute;ò&frac14;&Ccedil;×&Aring;&Atilde;&iquest;&Acirc;&Ouml;&Ntilde;&shy;&raquo;·°&Ntilde;sum&sup1;é&Aacute;&atilde;&iexcl;&pound;&iexcl;&pound;&AElig;&oslash;&Euml;&Agrave;&Icirc;&Ograve;&Aacute;&Euml;&micro;÷&Ecirc;&Ocirc;&ordm;&Atilde;&frac34;&Atilde;
        for(i=0; i<k; i++){
            scanf("%f",&temp[i]);//&cedil;&atilde;°&euml;&Igrave;ì&cedil;&ntilde;&Ecirc;&frac12;&iquest;&Oslash;&Ouml;&AElig;&Iacute;ü&cedil;&Auml;&Aacute;&Euml;&iexcl;&pound;&iexcl;&pound;
            
//sum+=temp[i];
        }
        bubbleSort(temp,k);
        int i2;
        for(i2=1; i2<k-1; i2++){
            sum+=temp[i2];
        }
        stu[j]=sum/(k-2);
    }
    bubbleSort(stu,n);
    for(i=n-m; i<n; i++){//&Iuml;&euml;&acute;&Oacute;×&icirc;&ordm;ó&Ecirc;&auml;&sup3;&ouml;&frac14;&cedil;&cedil;&ouml;&Ecirc;&yacute;&frac34;&Iacute;&Ouml;±&frac12;&Oacute;&frac14;&otilde;&frac14;&cedil;&pound;&not;&sup2;&raquo;&Oacute;&Atilde;&Ocirc;&Ugrave;&frac14;&otilde;&Ograve;&raquo;&iexcl;&pound;
        printf("%.3f",stu[i]);
        if(i!=n-1){
            printf(" ");
        }
    }
    return 0;
}
4 回复
#2
rjsp2020-05-06 08:35
首先要给出链接,https://

然后我编译 你的代码,报错:
tmp = arr[j];
warning C4244: “=”: 从“float”转换到“int”,可能丢失数据
改掉就好了。

也就是说,编译器已经告诉你错误原因了,但你看都不愿意看一眼。
#3
wmf20142020-05-06 08:37
用了冒泡排序,会不会是超时错误?可直接用c提供的qsort试试。
另:这题好像可以在数据输入阶段就可排序好,用插入排序最多只排20个数据,float数组也只要设20个。
下述代码通过测试(只对20个float元素排序):
程序代码:
#include<stdio.h>

int main() {
    int i, j, n, k, m;
    float a[20] = { 0 };
    scanf("%d%d%d", &n, &k, &m);
    while (n--)
    {
        float t, min = 1000, max = -1, sum = 0;
        for (i = 0; i < k; i++)
        {
            scanf("%f", &t);
            sum += t;
            if (min > t)min = t;
            if (max < t)max = t;
        }
        sum = (sum - min - max) / (k - 2);
        for (i = m - 1; i >= 0&&sum<a[i]; i--);
        for (j = 0; j < i; j++)a[j] = a[j + 1];
        if (i >= 0)a[i] = sum;
    }
    for (i = 0; i < m; i++)
    {
        if (i)printf(" ");
        printf("%.3f", a[i]);
    }
    return 0;
}



[此贴子已经被作者于2020-5-6 12:30编辑过]

#4
魂之子2020-05-06 22:50
回复 2楼 rjsp
感谢大佬帮我指出错误,小弟初来乍到不懂规矩,多包涵。请问一下大佬用的是什么环境,我用dev没有warning。
#5
魂之子2020-05-06 23:14
回复 3楼 wmf2014
感谢大佬给我提的宝贵建议,我补了一下插入排序和qsort函数,请问一下这些东西是哪一块的内容啊?是数据结构的内容吗?
1