【2674】3-5 学生成绩统计 SDUT

32 篇文章 0 订阅


3-5 学生成绩统计

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

通过本题目练习可以掌握对象数组的用法,主要是对象数组中数据的输入输出操作。

设计一个学生类Student 它具有私有的数据成员:学号、姓名、数学成绩、英语成绩、计算机成绩;具有公有的成员函数:求三门课总成绩的函数int sum(); 求三门课平均成绩的函数 double average(); 输出学生基本信息、总成绩和平均成绩的函数 void print() 设置学生数据信息的函数voidset_stu_info(int n,char *p,int m,int e,int c)

请编写主函数,建立学生对象数组,从键盘输入一组学生数据,输出学生的成绩统计表:

stuID 姓名 数学 英语 计算机 总成绩 平均成绩

001 xxx 90 85 95 270 90.0

 

002 yyy 95 98 92 285 95.0

输入

输入数据有5行,代表5个学生的信息。

每行有5个数据,数据间用一个空格分隔,分别代表学生的学号、姓名、数学成绩、英语成绩和计算机成绩。除了姓名是符号串外,其他均为整型数据,数据在int类型范围内。

输出

输出数据一共有7行。

第一行输出提示信息“Input the messages of five students(StudentID Name Math English Computer )

第二行输出一个空行,进行输入输出间的间隔

第三行输出表头“StuID Name Math Eng Com Total Average ,这一行有7个数据,数据间用制表符\t’分隔,分别代表学生的学号、姓名、数学成绩、英语成绩、计算机成绩、总成绩和平均成绩。其中平均成绩为实型数据,保留1位小数。

4-8行分别输出5个学生的相关数据。每个数据占一个制表符的空间。格式同上。

示例输入

1001 Andy 89 90 93
1002 Mary 93 95 98
1003 Luis 90 85 98
1004 Sam 91 95 98
1005 Lily 87 98 99

示例输出

Input the messages of five students(StudentID Name Math English Computer )

StuID	Name	Math	Eng	Com	Total	Average
1001	Andy	89	90	93	272	90.7
1002	Mary	93	95	98	286	95.3
1003	Luis	90	85	98	273	91.0
1004	Sam	91	95	98	284	94.7
1005	Lily	87	98	99	284	94.7

这道题写的很乱,只是ac了,代码毫无条理,先发出来,以后会优化

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

class stud
{
private:
    string name;
    int id, m, e, c;
public:
    void setstud(class stud *a,int n)//对象数组的输入
    {
        int i;
        for(i=0; i<n; i++)
        {
            cin>>a[i].id>>a[i].name>>a[i].m>>a[i].e>>a[i].c;
        }
    }
    int sum(class stud a)//求和
    {
        int su=0;
        su+=a.c;
        su+=a.e;
        su+=a.m;
        return su;
    }
    double ave(int su)//求平均值
    {
        double av;
        av=(su*1.0)/3;
        return av;
    }
    void show(class stud *a)//输出
    {
        cout<<"StuID"<<"\t"<<"Name"<<"\t"<<"Math"<<"\t"<<"Eng"<<"\t"<<"Com"<<"\t"<<"Total"<<"\t"<<"Average"<<endl;
        for(int i=0; i<5; i++)
        {
            int su=sum(a[i]);
            double av=ave(su);
            cout<<a[i].id<<"\t"<<a[i].name<<"\t"<<a[i].m<<"\t"<<a[i].e<<"\t"<<a[i].c<<"\t"<<su<<"\t";
            printf("%.1lf\n",av);
        }
    }
};

int main()
{
    cout<<"Input the messages of five students(StudentID Name Math English Computer )"<<"\n"<<endl;
    class stud st[5];
    st[5].setstud(st,5);
    st[5].show(st);
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
上升子序列是指在一个序列中,如果一些数字呈上升趋势排列,那么这些数字就可以组成一个上升子序列。比如序列 {1, 3, 5, 2, 4, 6} 中,{1, 3, 5} 和 {2, 4, 6} 就是两个上升子序列。 SDUT(Shandong University of Technology,山东理工大学)的上升子序列问题是这样的:给定一个长度为 n 的序列,找出其中的一个最长的上升子序列。例如,对于序列 {1, 4, 3, 5, 6, 2},其最长的上升子序列为 {1, 4, 5, 6},长度为 4。 求解这个问题可以使用动态规划算法。我们可以定义一个数组 dp,其中 dp[i] 表示以第 i 个数字为结尾的最长上升子序列的长度。初始时,dp[i] 的值都为 1,因为每个数字本身就可以组成一个长度为 1 的上升子序列。然后,我们从第 2 个数字开始依次计算 dp[i] 的值,计算方法如下: - 对于第 i 个数字,我们枚举它前面的所有数字 j,如果 j 小于 i,那么 dp[i] 的值可以更新为 dp[j]+1(因为以 j 为结尾的最长上升子序列再加上数字 i 就可以得到以 i 为结尾的最长上升子序列)。 - 在枚举 j 的过程中,我们还需要维护一个变量 max_len,它表示所有 dp[j]+1 的最大值。这是因为以 i 为结尾的最长上升子序列并不一定是以 j 为结尾的最长上升子序列再加上一个数字 i 得到的,有可能是以 j 为结尾的最长上升子序列和以 i 为结尾的最长上升子序列中的某个更长的子序列拼接得到的。 - 最终,我们遍历整个 dp 数组,找出其中的最大值即可。 下面是 Python 代码实现: ```python def longest_increasing_subsequence(nums): n = len(nums) dp = [1] * n max_len = 1 for i in range(1, n): for j in range(i): if nums[j] < nums[i]: dp[i] = max(dp[i], dp[j]+1) max_len = max(max_len, dp[i]) return max_len ``` 时间复杂度为 O(n^2)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值