云泽九渊 2024-10-23 08:10 采纳率: 0%
浏览 8

洛谷排队接水问题差一个样例,苦思不出

您好,打扰一下,我这只有一个样例没过,我也不知道为什么,希望您抽时间看一下我的代码问题[抱拳]

#include<stdio.h>

int main()
{
//先进行排序,再进行算平均等待时间

int n = 0;
scanf("%d", &n);//n为总人数
int time[1001] = { 0 };
for (int i = 0; i < n; i++)
{
    scanf("%d", &time[i]);
}//吸收每个人所用时间


int peo[1000] = {0};
for (int c = 1; c <= n; c++)
{
    peo[c - 1] = c;
}//给每个人标上序号,以便后续按要求输出

//把每个人的时间排序//冒泡排序
int i = 0;
for (i = 0; i < n-1; i++)
{

    for (int j = 0; j < n - i - 1; j++)
    {
        if (time[j] >= time[j + 1])
        {
            int t = 0;
            t = time[j];
            time[j] = time[j + 1];
            time[j + 1] = t;

            int x = 0;
            x = peo[j];
            peo[j] = peo[j + 1];
            peo[j + 1] = x;
        }
    }

}

for (int y = 0; y < n; y++)//按要求打印排好序后每个人的标签序号
{
    printf("%d ", peo[y]);
}

//下边找出最少的平均用时
//第一个时间加(n-1)遍,第二个时间加(n-2)遍,最后一个时间加0遍
//最后,统一除以n


long long sum = 0;

for (int m = 1; m <= n; m++)//把所有用时都加起来
{
    int py = n-m;
    for (py; py > 0; py--)
    {
        sum = sum + time[m-1];
    }

}

double atime = sum / (double)n;//计算平均时间

printf("\n%.2lf\n", atime);//按其要求格式输出

return 0;

}

  • 写回答

1条回答 默认 最新

  • 趣享先生 优质创作者: 编程框架技术领域 2024-10-23 09:29
    关注

    帮你修改了下,你试试看:(如若有用,还请题主采纳!)

    #include <stdio.h>
    
    int main() {
        int n = 0;
        scanf("%d", &n); // n为总人数
        int time[1001] = {0};
        for (int i = 0; i < n; i++) {
            scanf("%d", &time[i]); // 吸收每个人所用时间
        }
    
        int peo[1000] = {0};
        for (int c = 1; c <= n; c++) {
            peo[c - 1] = c; // 给每个人标上序号
        }
    
        // 冒泡排序
        for (int i = 0; i < n - 1; i++) {
            for (int j = 0; j < n - i - 1; j++) {
                if (time[j] > time[j + 1]) {
                    // 交换时间
                    int t = time[j];
                    time[j] = time[j + 1];
                    time[j + 1] = t;
    
                    // 交换序号
                    int x = peo[j];
                    peo[j] = peo[j + 1];
                    peo[j + 1] = x;
                }
            }
        }
    
        // 打印排好序后每个人的标签序号
        for (int y = 0; y < n; y++) {
            printf("%d ", peo[y]);
        }
    
        // 计算平均等待时间
        long long sum = 0;
        long long total_wait_time = 0;
    
        for (int i = 0; i < n; i++) {
            total_wait_time += sum; // 当前总等待时间加上之前的总用水时间
            sum += time[i]; // 更新总用水时间
        }
    
        double atime = (double)total_wait_time / n; // 计算平均时间
        printf("\n%.2lf\n", atime); // 按其要求格式输出
    
        return 0;
    }
    
    评论

报告相同问题?

问题事件

  • 创建了问题 10月23日