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; }