鱼C论坛

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

[已解决]拿奖的问题

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

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

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

x
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. struct Student {
  4.                 char name[20];
  5.                 int finalscore;
  6.                 int classscore;
  7.                 char isworker;
  8.                 char iswest;
  9.                 int article;
  10.         };
  11. int n;
  12. int maxpay = 0;
  13. char maxstu[20];
  14. int totalpay = 0;
  15. int pay = 0;
  16. int main(){
  17.        
  18.         scanf("%d", &n);
  19.         struct Student student[n];
  20.         for(int i = 0; i < n; i++){
  21.                 scnaf("%s%d%d%c%c%d", \
  22.                 &student[i].name\
  23.                 &student[i].finalscore\
  24.                 &student[i].classscore\
  25.                 &student[i].isworker\
  26.                 &student[i].iswest\
  27.                 &student[i].article);
  28.         }
  29.         for(int i = 0; i < n; i++){
  30.                 if(student[i].classscore > 80){
  31.                         if(student[i].article > 0){
  32.                                 pay += 8000; //院士
  33.                         }
  34.                 }
  35.                 if(student[i].finalscore > 85){
  36.                         if(student[i].classscore > 80){
  37.                                 pay += 4000; //五四
  38.                         }
  39.                         if(student[i].iswest == 'Y'){
  40.                                 pay += 1000; //西部
  41.                         }
  42.                 }
  43.                 if(student[i].finalscore > 90){
  44.                         pay += 2000; //成绩
  45.                 }
  46.                 if(student[i].classscore > 80 && student[i].isworker == 'Y'){
  47.                         pay += 850;
  48.                 }
  49.                 if(pay > maxpay){
  50.                         maxpay = pay;
  51.                         strcpy(maxstu, student[i].name);
  52.                 }
  53.                 totalpay += pay;
  54.                 }
  55.                
  56.         }
  57.         printf("%s\n%d\n%d", maxstu, maxpay, totalpay);
  58.         return 0;
  59. }
复制代码

代码如上 , 题目链接在下
https://www.luogu.com.cn/problem/P1051
求助 , 我写的代码老是报错 , 不知道怎么回事...
另外 , 也不知道这个代码能不能解决问题
最佳答案
2022-3-17 19:09:50
  1. #include <iostream>
  2. #include <vector>
  3. #include <utility>

  4. typedef struct Students {
  5.         std::string name;
  6.         size_t exam, review;
  7.         bool leader, western;
  8.         short published;
  9.         size_t scholarship;
  10.         Students(std::string n, size_t e, size_t r, bool l, bool w, short p) :
  11.                 name(n),
  12.                 exam(e),
  13.                 review(r),
  14.                 leader(l),
  15.                 western(w),
  16.                 published(p),
  17.                 scholarship(0){}
  18. }Students;

  19. int main() {
  20.         std::string name;
  21.         size_t N, exam, review;
  22.         char leader, western;
  23.         short published;
  24.         std::cin >> N;
  25.         std::vector<Students> std;
  26.         for (size_t n = 0; n < N; n++) {
  27.                 std::cin
  28.                         >> name
  29.                         >> exam
  30.                         >> review
  31.                         >> leader
  32.                         >> western
  33.                         >> published;
  34.                 std.push_back({ name, exam, review, leader == 'Y' ? true : false, western == 'Y' ? true : false, published });
  35.         }
  36.         size_t i = 0, sum = 0;
  37.         for (Students S : std) {
  38.                 if (S.exam > 80 && S.published)std[i].scholarship += 8000, sum += 8000;
  39.                 if (S.exam > 85 && S.review > 80)std[i].scholarship += 4000, sum += 4000;
  40.                 if (S.exam > 90)std[i].scholarship += 2000, sum += 2000;
  41.                 if (S.exam > 85 && S.western)std[i].scholarship += 1000, sum += 1000;
  42.                 if (S.review > 80 && S.leader)std[i].scholarship += 850, sum += 850;
  43.                 i++;
  44.         }
  45.         std::pair<std::string, size_t> highest("", 0);
  46.         for (Students S : std) {
  47.                 if (S.scholarship > highest.second) {
  48.                         highest.first = S.name;
  49.                         highest.second = S.scholarship;
  50.                 }
  51.         }
  52.         std::cout
  53.                 << highest.first << std::endl
  54.                 << highest.second << std::endl
  55.                 << sum << std::endl;
  56.         return 0;
  57. }
复制代码
  1. 4
  2. YaoLin 87 82 Y N 0
  3. ChenRuiyi 88 78 N Y 1
  4. LiXin 92 88 N N 0
  5. ZhangQin 83 87 Y N 14
复制代码
  1. ChenRuiyi
  2. 9000
  3. 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.name,\
        &student.finalscore,\
        &student.classscore,\
        &student.isworker,\
        &student.iswest,\
        &student.article);
    }

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

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

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

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

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

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

        if(pay > maxpay)
                {
            maxpay = pay;
            strcpy(maxstu, student.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 编辑

  1. scanf("%s%d%d%c%c%d", \
  2.         student[i].name,\
  3.         &student[i].finalscore,\
  4.         &student[i].classscore,\
  5.         &student[i].isworker,\
  6.         &student[i].iswest,\
  7.         &student[i].article);
复制代码

评分

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

查看全部评分

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

使用道具 举报

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

  4. typedef struct Students {
  5.         std::string name;
  6.         size_t exam, review;
  7.         bool leader, western;
  8.         short published;
  9.         size_t scholarship;
  10.         Students(std::string n, size_t e, size_t r, bool l, bool w, short p) :
  11.                 name(n),
  12.                 exam(e),
  13.                 review(r),
  14.                 leader(l),
  15.                 western(w),
  16.                 published(p),
  17.                 scholarship(0){}
  18. }Students;

  19. int main() {
  20.         std::string name;
  21.         size_t N, exam, review;
  22.         char leader, western;
  23.         short published;
  24.         std::cin >> N;
  25.         std::vector<Students> std;
  26.         for (size_t n = 0; n < N; n++) {
  27.                 std::cin
  28.                         >> name
  29.                         >> exam
  30.                         >> review
  31.                         >> leader
  32.                         >> western
  33.                         >> published;
  34.                 std.push_back({ name, exam, review, leader == 'Y' ? true : false, western == 'Y' ? true : false, published });
  35.         }
  36.         size_t i = 0, sum = 0;
  37.         for (Students S : std) {
  38.                 if (S.exam > 80 && S.published)std[i].scholarship += 8000, sum += 8000;
  39.                 if (S.exam > 85 && S.review > 80)std[i].scholarship += 4000, sum += 4000;
  40.                 if (S.exam > 90)std[i].scholarship += 2000, sum += 2000;
  41.                 if (S.exam > 85 && S.western)std[i].scholarship += 1000, sum += 1000;
  42.                 if (S.review > 80 && S.leader)std[i].scholarship += 850, sum += 850;
  43.                 i++;
  44.         }
  45.         std::pair<std::string, size_t> highest("", 0);
  46.         for (Students S : std) {
  47.                 if (S.scholarship > highest.second) {
  48.                         highest.first = S.name;
  49.                         highest.second = S.scholarship;
  50.                 }
  51.         }
  52.         std::cout
  53.                 << highest.first << std::endl
  54.                 << highest.second << std::endl
  55.                 << sum << std::endl;
  56.         return 0;
  57. }
复制代码
  1. 4
  2. YaoLin 87 82 Y N 0
  3. ChenRuiyi 88 78 N Y 1
  4. LiXin 92 88 N N 0
  5. ZhangQin 83 87 Y N 14
复制代码
  1. ChenRuiyi
  2. 9000
  3. 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-5-20 17:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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