鱼C论坛

 找回密码
 立即注册
查看: 984|回复: 11

[已解决]拿奖的问题

[复制链接]
发表于 2022-3-17 10:17:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <bits/stdc++.h>
using namespace std;
struct Student {
                char name[20];
                int finalscore;
                int classscore;
                char isworker;
                char iswest;
                int article;
        };
int n;
int maxpay = 0;
char maxstu[20];
int totalpay = 0;
int pay = 0; 
int main(){
        
        scanf("%d", &n);
        struct Student student[n];
        for(int i = 0; i < n; i++){
                scnaf("%s%d%d%c%c%d", \
                &student[i].name\
                &student[i].finalscore\
                &student[i].classscore\
                &student[i].isworker\
                &student[i].iswest\
                &student[i].article);
        }
        for(int i = 0; i < n; i++){
                if(student[i].classscore > 80){
                        if(student[i].article > 0){
                                pay += 8000; //院士 
                        }
                }
                if(student[i].finalscore > 85){
                        if(student[i].classscore > 80){
                                pay += 4000; //五四 
                        }
                        if(student[i].iswest == 'Y'){
                                pay += 1000; //西部 
                        }
                }
                if(student[i].finalscore > 90){
                        pay += 2000; //成绩 
                }
                if(student[i].classscore > 80 && student[i].isworker == 'Y'){
                        pay += 850;
                }
                if(pay > maxpay){
                        maxpay = pay;
                        strcpy(maxstu, student[i].name);
                }
                totalpay += pay;
                }
                
        }
        printf("%s\n%d\n%d", maxstu, maxpay, totalpay);
        return 0;
}
代码如上 , 题目链接在下
https://www.luogu.com.cn/problem/P1051
求助 , 我写的代码老是报错 , 不知道怎么回事...
另外 , 也不知道这个代码能不能解决问题
最佳答案
2022-3-17 19:09:50
#include <iostream>
#include <vector>
#include <utility>

typedef struct Students {
        std::string name;
        size_t exam, review;
        bool leader, western;
        short published;
        size_t scholarship;
        Students(std::string n, size_t e, size_t r, bool l, bool w, short p) :
                name(n),
                exam(e),
                review(r),
                leader(l),
                western(w),
                published(p),
                scholarship(0){}
}Students;

int main() {
        std::string name;
        size_t N, exam, review;
        char leader, western;
        short published;
        std::cin >> N;
        std::vector<Students> std;
        for (size_t n = 0; n < N; n++) {
                std::cin
                        >> name
                        >> exam
                        >> review
                        >> leader
                        >> western
                        >> published;
                std.push_back({ name, exam, review, leader == 'Y' ? true : false, western == 'Y' ? true : false, published });
        }
        size_t i = 0, sum = 0;
        for (Students S : std) {
                if (S.exam > 80 && S.published)std[i].scholarship += 8000, sum += 8000;
                if (S.exam > 85 && S.review > 80)std[i].scholarship += 4000, sum += 4000;
                if (S.exam > 90)std[i].scholarship += 2000, sum += 2000;
                if (S.exam > 85 && S.western)std[i].scholarship += 1000, sum += 1000;
                if (S.review > 80 && S.leader)std[i].scholarship += 850, sum += 850;
                i++;
        }
        std::pair<std::string, size_t> highest("", 0);
        for (Students S : std) {
                if (S.scholarship > highest.second) {
                        highest.first = S.name;
                        highest.second = S.scholarship;
                }
        }
        std::cout
                << highest.first << std::endl
                << highest.second << std::endl
                << sum << std::endl;
        return 0;
}
4
YaoLin 87 82 Y N 0
ChenRuiyi 88 78 N Y 1
LiXin 92 88 N N 0
ZhangQin 83 87 Y N 14
ChenRuiyi
9000
28700
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-17 12:57:31 From FishC Mobile | 显示全部楼层
本帖最后由 zzxhh628 于 2022-3-17 12:59 编辑

#include <stdio.h>

struct Student
{
        char name[20];
        int finalscore;
        int classscore;
        char isworker;
        char iswest;
        int article;
};

int n;
int maxpay = 0;
char maxstu[20];
int totalpay = 0;
int pay = 0;

int main()
{
     scanf("%d", &n);
    struct Student student[n];

    for(int i = 0; i < n; i++)
        {
        scanf("%s%d%d%c%c%d", \
        &student[i].name,\
        &student[i].finalscore,\
        &student[i].classscore,\
        &student[i].isworker,\
        &student[i].iswest,\
        &student[i].article);
    }

    for(int i = 0; i < n; i++)
        {

        if(student[i].classscore > 80)
                {
            if(student[i].article > 0)
                        {
                pay += 8000; //院士
            }
             }

        if(student[i].finalscore > 85)
                {
            if(student[i].classscore > 80)
                        {
                pay += 4000; //五四
            }

            if(student[i].iswest == 'Y')
                        {
                pay += 1000; //西部
            }
        }

        if(student[i].finalscore > 90)
                {
            pay += 2000; //成绩
        }

        if(student[i].classscore > 80 && student[i].isworker == 'Y')
                {
            pay += 850;
        }

        if(pay > maxpay)
                {
            maxpay = pay;
            strcpy(maxstu, student[i].name);
        }
        totalpay += pay;
    }
    printf("%s\n%d\n%d", maxstu, maxpay, totalpay);
    return 0;
}
现在能运行了,能不能实现题目要求你自己试试吧。
你这里原来有些小错误,例如函数名错误和大括号的错误,头文件其实用这个也行,你也可以改回去,在stdio.h就不用using namespace std;了。

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
柿子饼同学 + 5 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-17 13:12:45 | 显示全部楼层
报错了...
屏幕截图 2022-03-17 131212.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-17 16:10:24 | 显示全部楼层
本帖最后由 jhq999 于 2022-3-17 16:12 编辑

scanf("%s%d%d%c%c%d", \
        student[i].name,\
        &student[i].finalscore,\
        &student[i].classscore,\
        &student[i].isworker,\
        &student[i].iswest,\
        &student[i].article);

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
柿子饼同学 + 5 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-3-17 19:09:50 | 显示全部楼层    本楼为最佳答案   
#include <iostream>
#include <vector>
#include <utility>

typedef struct Students {
        std::string name;
        size_t exam, review;
        bool leader, western;
        short published;
        size_t scholarship;
        Students(std::string n, size_t e, size_t r, bool l, bool w, short p) :
                name(n),
                exam(e),
                review(r),
                leader(l),
                western(w),
                published(p),
                scholarship(0){}
}Students;

int main() {
        std::string name;
        size_t N, exam, review;
        char leader, western;
        short published;
        std::cin >> N;
        std::vector<Students> std;
        for (size_t n = 0; n < N; n++) {
                std::cin
                        >> name
                        >> exam
                        >> review
                        >> leader
                        >> western
                        >> published;
                std.push_back({ name, exam, review, leader == 'Y' ? true : false, western == 'Y' ? true : false, published });
        }
        size_t i = 0, sum = 0;
        for (Students S : std) {
                if (S.exam > 80 && S.published)std[i].scholarship += 8000, sum += 8000;
                if (S.exam > 85 && S.review > 80)std[i].scholarship += 4000, sum += 4000;
                if (S.exam > 90)std[i].scholarship += 2000, sum += 2000;
                if (S.exam > 85 && S.western)std[i].scholarship += 1000, sum += 1000;
                if (S.review > 80 && S.leader)std[i].scholarship += 850, sum += 850;
                i++;
        }
        std::pair<std::string, size_t> highest("", 0);
        for (Students S : std) {
                if (S.scholarship > highest.second) {
                        highest.first = S.name;
                        highest.second = S.scholarship;
                }
        }
        std::cout
                << highest.first << std::endl
                << highest.second << std::endl
                << sum << std::endl;
        return 0;
}
4
YaoLin 87 82 Y N 0
ChenRuiyi 88 78 N Y 1
LiXin 92 88 N N 0
ZhangQin 83 87 Y N 14
ChenRuiyi
9000
28700

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
柿子饼同学 + 5 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-18 08:39:29 | 显示全部楼层

答案不对...>﹏<
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-18 09:00:53 | 显示全部楼层

size_t 不就是无符号整型嘛 , 为什么要这么用呢
另外 , 我觉得我学的还是太少了 , 好多写法我都不知道...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-18 09:48:43 From FishC Mobile | 显示全部楼层
柿子饼同学 发表于 2022-3-18 09:00
size_t 不就是无符号整型嘛 , 为什么要这么用呢
另外 , 我觉得我学的还是太少了 , 好多写法我都不知道.. ...

是啊,因为数量必然是正整数,其实也可以用 int
只是我想活用 c 语言的所有数据类型,比如我的代码中的 short
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-18 10:37:49 | 显示全部楼层
傻眼貓咪 发表于 2022-3-18 09:48
是啊,因为数量必然是正整数,其实也可以用 int
只是我想活用 c 语言的所有数据类型,比如我的代码中的  ...

原来如此啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-18 10:38:35 | 显示全部楼层

我下课就把代码写一遍
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-18 21:16:29 | 显示全部楼层

求问大佬是怎么学STL的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-18 22:22:47 | 显示全部楼层
柿子饼同学 发表于 2022-3-18 21:16
求问大佬是怎么学STL的

大佬不敢当。
我最喜欢看其他大佬的代码,如果发现有新玩意(没有看过的写法),我就非常感兴趣,自己试试用(可能我是好奇宝宝吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 06:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表