请教大佬oj题目 计算职工工资问题

oj上的题,为什么过不了?

#include<stdio.h>
struct Employee{
    char name[10];
    float Basic,Variable,Expenditure,Payroll;
};
void Sort(struct Employee *p,int n)
{
    struct Employee a;
    int i,j;
    for(i=0;i<n;i++)
    for(j=i;j<n;j++)
    {
        if(p[i].Payroll>p[j].Payroll||(p[i].Payroll==p[j].Payroll&&p[i].Basic>p[j].Basic)||(p[i].Payroll==p[j].Payroll&&p[i].Basic==p[j].Basic&&p[i].Variable>p[j].Variable))
        {
            a=p[i];
            p[i]=p[j];
            p[j]=a;
        }
    }
}
int main()
{
    struct Employee emp[100];
    int i,n,Cas=0;
    while(scanf("%d",&n)!=EOF)
    {
        Cas++;
        for(i=0;i<n;i++)
        {
            scanf("%s%f%f%f",emp[i].name,&emp[i].Basic,&emp[i].Variable,&emp[i].Expenditure);
            emp[i].Payroll=emp[i].Basic+emp[i].Variable-emp[i].Expenditure;
        }
        Sort(emp,n);
        printf("Case #%d:\n",Cas);
        for(i=0;i<n;i++)
            printf("%10s%10.2f\n",emp[i].name,emp[i].Payroll);
    }
    return 0;
}

题目:给定N个职员的信息,包括姓名、基本工资、浮动工资和支出,要求编写程序按照排序规则顺序输出每位职员的姓名和实发工资(实发工资=基本工资+浮动工资-支出)。
排序规则:按照实发工资从小到大排序,如果实发工资相同的则按照基本工资从小到大排序,如果实发工资和基本工资都相同,则按照浮动工资从小到大排序。

注意:main函数已经给定(如下所示)。
请将程序补充完整。
提交时只需要提交自己补充的代码部分,不需要提交给定的main函数的代码部分。

1个回答

void Sort(struct Employee *p,int n)
{
    struct Employee a;
    int i,j;
    for(i=0;i<n;i++)
    for(j=i;j<n;j++)
    {
        if(p[i].Payroll>p[j].Payroll||(p[i].Payroll==p[j].Payroll&&p[i].Basic>p[j].Basic)||(p[i].Payroll==p[j].Payroll&&p[i].Basic==p[j].Basic&&p[i].Variable>p[j].Variable))
        {
            a=p[i];
            p[i]=p[j];
            p[j]=a;
        }
    }
}

循环中把j=i改为j=0试试,因为你的这个循环好像并不能实现题目中的排序规则

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问