7-2 部分排序
分数 10
全屏浏览题目
切换布局
作者 周强
单位 青岛大学
对于一组数据,我们可以只对原先处在中间位置的那些元素进行排序。
输入格式:
在一行内输入
n r a1 a2 ... an
其中,不大于200的正整数n
表示该组数据的个数;不大于200的非负整数r
表示该组数据两端各自留有r
个数不参与排序,若r+r>=n
,则该组数据无需排序。
整数a1 a2 ... an
是该组的n
个数据,且都在8位以内。输出格式:
排序之后的序列,元素之间用一个空格间隔,最后一个元素之后不加空格。
输入样例:
5 1 6 5 4 3 2
输出样例:
6 3 4 5 2
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
- #include<iostream>
- using namespace std;
- int main()
- {
- int n, r;
- cin >> n >> r;
- int a[300];
-
- for (int i = 0; i < n; i++)
- {
- cin >> a[i];
- }
-
- int temp;
- if (r + r < n)
- {
-
- for (int k = 1, i = r; i < n - r; i++, k++)//设置一个k值使得下面遍历次数改变
- {
- for (int j = r; j < n - r - k; j++)
- {
- if (a[j] > a[j + 1])
- {
- temp = a[j];
- a[j] = a[j + 1];
- a[j + 1] = temp;
- }
- }
- }
- }
- for (int i = 0; i < n; i++)
- {
- if (i == 0)
- {
- cout << a[i];
- }
- else
- cout << " " << a[i];
-
- }
- return 0;
- }
-
7-3 办事大厅排队
分数 10
全屏浏览题目
切换布局
作者 吴云鹏
单位 郑州大学
在郑州大学综合办事大厅,每天陆陆续续有很多人来排队办事。现在你能否写程序帮助老师时刻了解当前办理业务的情况。
请同学们学习C++ STL中 list相关内容后,编程实践。
输入格式:
第一行一个数字N,表示排队信息或者查询信息条目的数量。
以下N行,每行的内容有以下3种情况
(1) in name 表示名字为name的人员新来到办事大厅,排在队伍的最后。(in和name间存在一个空格,name是名字对应字符串,长度不超过10)。
(2) out 表示当前排在最前面的人已经办理完业务,离开了。
(3) q 表示一次查询,请输出当前正在办理业务的人,也就是队伍的第1个人。如果当前无人办理业务,则输出“NULL”,不包括引号。
输出格式:
请根据以上信息,每次遇到查询时,对应一行输出。如果这时队伍有人,则输出第一个人的姓名,否则输出NULL。
输入样例:
5 in A out q in B q输出样例:
在这里给出相应的输出。例如:
NULL B代码长度限制
16 KB
时间限制
1000 ms
内存限制
64 MB
- #include<cmath>
- #include<cstdio>
- #include<algorithm>
- #include<string>
- #include<vector>
- #include<iomanip>
- #include<iostream>
- #include<cstring>
- #include <list>
- using namespace std;
- int main()
- {
- int n;
- string s,name;
- cin>>n;
- list<string> l;
- while(n--)
- {
- cin>>s;
- if(s=="in")
- {
- cin>>name;
- l.push_back(name);
- }
- else if(s=="out")
- {
- l.pop_front();
- }
- else if(s=="q")
- {
- if(l.empty())
- {
- cout<<"NULL"<<endl;
- }else
- {
- cout<<l.front()<<endl;
- }
- }
- }
-
- return 0;
- }
7-3 找出不是两个数组共有的元素
分数 10
全屏浏览题目
切换布局
作者 张彤彧
单位 浙江大学
给定两个整型数组,本题要求找出不是两者共有的元素。
输入格式:
输入分别在两行中给出两个整型数组,每行先给出正整数N(≤20),随后是N个整数,其间以空格分隔。
输出格式:
在一行中按照数字给出的顺序输出不是两数组共有的元素,数字间以空格分隔,但行末不得有多余的空格。题目保证至少存在一个这样的数字。同一数字不重复输出。
输入样例:
10 3 -5 2 8 0 3 5 -15 9 100 11 6 4 8 2 6 -5 9 0 100 8 1输出样例:
3 5 -15 6 4 1
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
- #include<iostream>
- using namespace std;
- int main()
- {
- int a[20] = { 0 }, b[20] = { 0 }, c[41] = { 0 }, i, ii, iii, n, m, count = 0, num = 0;
- cin >> n;
- //num代表数组c的输出项数,i是for循环需要用到的,count判断数据是否重复
- for (i = 0; i < n; i++)
- {
- cin >> a[i];
- }
- cin >> m;
- for (i = 0; i < m; i++)
- {
- cin >> b[i];
- }
- for (i = 0; i < n; i++) {
- for (ii = 0; ii < m; ii++) {
- if (a[i] != b[ii])
- {
- count++;
- }//如果count和输入数据个数相同,那么就表示这个数据符合不相等的条件
- else break;
- }
- if (count == m)
- {
- c[num] = a[i];
- num++;
- }
- count = 0;
- } //将第一个数组内符合条件数据写入数组c[]
- for (i = 0; i < m; i++)
- {
- for (ii = 0; ii < n; ii++)
- {
- if (b[i] != a[ii])
- {
- count++;
- }
- }
- if (count == n)
- {
- c[num] = b[i];
- num++;
- }
- count = 0;
- } //将第二个数组内符合条件数据写入数组c[]
- for (i = 0; i < num; i++) {
- for (ii = i + 1; ii < num; ii++) {
- if (c[i] == c[ii]) {
- //数据重复后,把靠后的那个重复数据之后的数据全部向前移动一项,从而达到消除相同数据的目的
- for (iii = 0; iii < num - ii; iii++) {
- c[ii + iii] = c[ii + iii + 1];
- }
- ii--;
- num--;
- }
- }
- }
- for (i = 0; i < num; i++)
- {
- if (i == 0)
- {
- cout << c[i];
- }
- if (i != 0)
- {
- cout << " " << c[i];
- }
- }
- return 0;
- }