许加 2024-01-28 21:41 采纳率: 77.3%
浏览 3
已结题

C++的算法题,达不到预期结果


#include<iostream>
#include<cstring>
using namespace std;

typedef struct Student{
        string name;
        int Fin_Score;
        int Cla_Score;
        char Stu_Leader;
        char West;
        int thesis;
        int salary;
    }Stu;
    
int main()
{
    int N;
    int max = 0;
    int sum = 0;
    cin>>N;
    
    Stu a[N];
    
    for(int i=0;i<N;i++){
        getline(cin, a[i].name);
        cin>>a[i].Fin_Score>>a[i].Cla_Score>>a[i].Stu_Leader>>a[i].West>>a[i].thesis;
        a[i].salary = 0;
    }
    
    for(int i=0;i<N;i++){
        if(a[i].Fin_Score>80&&a[i].thesis>=1){
            a[i].salary += 8000;
        }
        if(a[i].Fin_Score>85&&a[i].Cla_Score>80){
            a[i].salary += 4000;
        }
        if(a[i].Fin_Score>90){
            a[i].salary += 2000;
        }
        if(a[i].Fin_Score>85&&a[i].West=='Y'){
            a[i].salary += 1000;
        }
        if(a[i].Cla_Score>80){
            a[i].salary += 850;
        }
        if(a[max].salary<a[i].salary){
            max = i;
        }
    }
    
    for(int i=0;i<N;i++){
        sum += a[i].salary;
    }
    
    cout<<a[max].name<<endl;
    cout<<a[max].salary<<endl;
    cout<<sum<<endl;
    return 0;
}这段代码为什么一直得不到预期的结果
  • 写回答

2条回答 默认 最新

  • writeBig 2024-01-28 22:00
    关注
    #include <iostream>
    #include <cstring>
    using namespace std;
    
    typedef struct Student {
        string name;
        int Fin_Score;
        int Cla_Score;
        char Stu_Leader;
        char West;
        int thesis;
        int salary;
    } Stu;
    
    int main() {
        int N;
        int max = 0;
        int sum = 0;
        cin >> N;
        cin.ignore(); // 清除输入流中的换行符
    
        Stu a[N];
    
        for (int i = 0; i < N; i++) {
            getline(cin, a[i].name);
            cin >> a[i].Fin_Score >> a[i].Cla_Score >> a[i].Stu_Leader >> a[i].West >> a[i].thesis;
            a[i].salary = 0;
            cin.ignore(); // 清除输入流中的换行符
        }
    
        for (int i = 0; i < N; i++) {
            if (a[i].Fin_Score > 80 && a[i].thesis >= 1) {
                a[i].salary += 8000;
            }
            if (a[i].Fin_Score > 85 && a[i].Cla_Score > 80) {
                a[i].salary += 4000;
            }
            if (a[i].Fin_Score > 90) {
                a[i].salary += 2000;
            }
            if (a[i].Fin_Score > 85 && a[i].West == 'Y') {
                a[i].salary += 1000;
            }
            if (a[i].Cla_Score > 80) {
                a[i].salary += 850;
            }
            if (a[i].salary > a[max].salary) { // 修正比较的逻辑
                max = i;
            }
        }
    
        for (int i = 0; i < N; i++) {
            sum += a[i].salary;
        }
    
        cout << a[max].name << endl;
        cout << a[max].salary << endl;
        cout << sum << endl;
        return 0;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月30日
  • 已采纳回答 6月22日
  • 创建了问题 1月28日

悬赏问题

  • ¥15 关于#c语言#的问题,请各位专家解答!
  • ¥15 这个如何解决详细步骤
  • ¥15 在微信h5支付申请中,别人给钱就能用我的软件,这个的所属行业是啥?
  • ¥30 靶向捕获探针设计软件包
  • ¥15 别人给钱就能用我的软件,这个的经营场景是啥?
  • ¥15 react-diff-viewer组件,如何解决数据量过大卡顿问题
  • ¥20 遥感植被物候指数空间分布图制作
  • ¥15 安装了xlrd库但是import不了…
  • ¥20 Github上传代码没有contribution和activity记录
  • ¥20 SNETCracker