C++ MOOC 西安交通大学 中国大学生MOOC网 期末考试

来源:互联网 发布:万能数据恢复大师 编辑:程序博客网 时间:2024/04/16 23:37

C++MOOC 期末考试 西安交通大学

1.
行程编码(20分)
题目内容:
输入一段由英文字母组成的文字,将这段文字的前面一半逆序(当文字长度为奇数时,前一半的长度是stringlength/2取整),然后写出其行程编码。

编码方法是:将字符串中k个连续相同的字母X记为kX。当k=1时,省略。

输入格式:
一段由英文字母组成的文字,长度小于200.

输出格式:
编码字符串,一行,无空格

输入样例:
AAAABCCCCC

输出样例:
B4A5C
时间限制:500ms内存限制:32000kb时间限制:500ms内存限制:32000kb

//// Created by Cooper on 04/06/2017.//#include <iostream>#include <stack>using namespace std;int main(){    string s;    cin >> s;    stack<char>stack1;    string temp;    int i=0;//  int chNum[27]={0};    for ( ; i < s.length() / 2; ++i) {        stack1.push(s[i]);    }    while (!stack1.empty()){        temp.push_back(stack1.top()); // 取得栈中元素        stack1.pop(); //弹出栈顶元素    }    for ( ; i < s.length(); ++i) { //i 接着上次的继续        temp.push_back(s[i]);    }    for(string::iterator iter = temp.begin(); iter != temp.end(); ++iter){        int tempNum=1;        if(*iter == *(iter+1)){            while(*iter == *(iter+1)){                tempNum++;                iter++;            }            cout<<tempNum<<*iter;        }        else{            cout<<*iter;        }    }    return 0;}

2.题目内容:
输入若干学生的成绩,统计各班的成绩的平均值,并按班级名称的机内码从小到大排序输出。
学生成绩信息包括:班级,学号和成绩。班级名称是”000”’时表示成绩输入结束。
班级名称不超过20字符,学号不超过10个字符,成绩为整数,平均成绩为双精度实数,保留三位小数。班级数不超过10个,总人数不超过100个。

输入格式:
若干行,每行信息包括班级,学号和成绩,用空格隔开,
最后一行为:000 000 000

输出格式:
若干行,每行信息包括:班级和平均成绩,中间用一个空格隔开。行数由输入中的班级数确定。

输入样例:
航天 001 80
信计 001 90
航天 002 70
航天 003 80
信计 002 91
000 000 000

输出样例:
航天 76.667
信计 90.500
时间限制:500ms内存限制:32000kb

实现代码:

//// Created by Cooper on 04/06/2017.//#include <iostream>#include <cstdio>#include<cstring>using namespace std;struct student{    char name[21];    int sum;//总分数    int num;//人数}pStudent[11];int main(){    char name[21], num[11];    int score;    int j = 0, t = 0, i, temp = 0;    while (1) {        cin >> name >> num >> score;        temp = 0;//是否找到的标记        if (strcmp(name, "000") == 0)            break;        for (i = 0; i < j; i++) {            if (strcmp(pStudent[i].name, name) == 0)//如果当前输入在结构体数组中找到,则将分数加入sum            {                pStudent[i].sum += score;                pStudent[i].num++;                temp = 1;            }        }        if (temp == 0)//如果没找到,则创建当前含有name的结构体        {            strcpy(pStudent[j].name, name);            pStudent[j].sum += score;            pStudent[j].num++;            j += 1;        }    }    for (i = 0; i < j; i++)//排序    {        for (t = 0; t < j - i - 1; t++) {            if (strcmp(pStudent[t].name, pStudent[t + 1].name) > 0) {                struct student tt;                tt = pStudent[t];                pStudent[t] = pStudent[t + 1];                pStudent[t + 1] = tt;            }        }    }    for (i = 0; i < j; i++) {        cout << pStudent[i].name<<" ";        printf("%.3f\n", 1.0 * pStudent[i].sum / pStudent[i].num);    }    return 0;}
原创粉丝点击