赞
踩
输入
第一行是整数 t,表示数据组数
每组数据:
第一行是整数 n , n < 50
第二行是 n 个整数
第三行是 n 个字符串
输出
将输入的整数原序输出两次,用","分隔
然后将输入的字符串原序输出两次,也用 ","分隔
样例输入
2
4
1 2 3 4
Tom Jack Marry Peking
1
0
Ted
样例输出
1,2,3,4,
1,2,3,4,
Tom,Jack,Marry,Peking,
Tom,Jack,Marry,Peking,
0,
0,
Ted,
Ted,
#include <iostream> using namespace std; template <class T> struct GoodCopy { // 在此处补充你的代码 void operator()(T* s, T* e, T* b) { int len = e - s; T tmp[200]; for (int i = 0; i < len; i++) tmp[i] = s[i]; for (int i = 0; i < len; i++) b[i] = tmp[i]; } //—————————————————————————————————————————— }; int a[200]; int b[200]; string c[200]; string d[200]; template <class T> void Print(T s, T e) { for (; s != e; ++s) cout << *s << ","; cout << endl; } int main() { int t; cin >> t; while (t--) { int m; cin >> m; for (int i = 0; i < m; ++i) cin >> a[i]; GoodCopy<int>()(a, a + m, b); Print(b, b + m); GoodCopy<int>()(a, a + m, a + m / 2); Print(a + m / 2, a + m / 2 + m); for (int i = 0; i < m; ++i) cin >> c[i]; GoodCopy<string>()(c, c + m, d); Print(c, c + m); GoodCopy<string>()(c, c + m, c + m / 2); Print(c + m / 2, c + m / 2 + m); } return 0; }
输入
多组数据,每组一行,是一个整数n和一个字符串s
输出
定义两个整数的距离为两个整数差的绝对值
定义两个字符串的距离为两个字符串长度差的绝对值
对每组数据:
对数组a按和n的距离从小到大排序后输出。距离相同的,值小的排在前面。
然后对数组b,按照和s的距离从小到大输出。距离相同的,字典序小的排在前面
样例输入
2 a123456
4 a12345
样例输出
1,3,0,4,7,8,9,10,15,20,
American,Peking,123456789,Jack,To,abcdefghijklmnop,
4,3,1,7,0,8,9,10,15,20,
Peking,American,Jack,123456789,To,abcdefghijklmnop,
#include <iostream> #include <cmath> #include <algorithm> #include <string> using namespace std; template <class T1, class T2> struct Closer { // 在此处补充你的代码 T1 n; T2 dis; Closer(T1 nn, T2 dd) :n(nn), dis(dd) {} bool operator ()(const T1& a, const T1& b) { int d1 = dis(a, n); int d2 = dis(b, n); if (d1 != d2)return d1 < d2; return a < b; } //———————————————————————————————— }; int Distance1(int n1, int n2) { return abs(n1 - n2); } int Distance2(const string& s1, const string& s2) { return abs((int)s1.length() - (int)s2.length()); } int a[10] = { 0,3,1,4,7,9,20,8,10,15 }; string b[6] = { "American","Jack","To","Peking","abcdefghijklmnop","123456789" }; int main() { int n; string s; while (cin >> n >> s) { sort(a, a + 10, Closer<int, int (*)(int, int)>(n, Distance1)); for (int i = 0; i < 10; ++i) cout << a[i] << ","; cout << endl; sort(b, b + 6, Closer<string, int (*)(const string&, const string&)>(s, Distance2)); for (int i = 0; i < 6; ++i) cout << b[i] << ","; cout << endl; } return 0; }
输入
无
输出
等同于样例
样例输入
无
样例输出
layer 0:
0,1,2,3,4,
5,6,7,8,9,
10,11,12,13,14,
15,16,17,18,19,
layer 1:
20,21,22,23,24,
25,26,27,28,29,
30,31,32,33,34,
35,36,37,38,39,
layer 2:
40,41,42,43,44,
45,46,47,48,49,
50,51,52,53,54,
55,56,57,58,59,
layer 0:
0,1,2,3,4,
5,6,7,8,9,
10,11,12,13,14,
15,16,17,18,19,
layer 1:
-1,-1,-1,-1,-1,
-1,-1,-1,-1,-1,
-1,-1,-1,-1,-1,
-1,-1,-1,-1,-1,
layer 2:
40,41,42,43,44,
45,46,47,48,49,
50,51,52,53,54,
55,56,57,58,59,
layer 0:
0,1,2,3,4,
5,6,7,8,9,
10,11,12,13,14,
15,16,17,18,19,
layer 1:
-1,-1,-1,-1,-1,
0,0,0,0,0,
-1,-1,-1,-1,-1,
-1,-1,-1,-1,-1,
layer 2:
40,41,42,43,44,
45,46,47,48,49,
50,51,52,53,54,
55,56,57,58,59,
layer 0:
10,5,
5,3.33333,
layer 1:
5,3.33333,
3.33333,2.5,
layer 2:
3.33333,2.5,
2.5,2,
****
7,3.33333
提示
建议做法:
#include <iostream> #include <iomanip> #include <cstring> using namespace std; template <class T> class CArray3D { // 在此处补充你的代码 public: int i, j, k; T* p; CArray3D(int a, int b, int c) :i(a), j(b), k(c) { p = new T[i * j * k]; } ~CArray3D() { delete[] p; } class Ret { public: T* ip; int k; Ret(T* a, int b) :ip(a), k(b) {} T* operator [](int j) {//第二个[] return ip + j * k; } operator T* () { return ip; }//下面的代码中有a[1],a[1]的类型为Ret,函数形参为*void,因此要重载T* }; Ret operator[](int i) {//第一个[] T* ip = p + i * j * k; return Ret(ip, k); } }; CArray3D<int> a(3, 4, 5); CArray3D<double> b(3, 2, 2); void PrintA() { for (int i = 0; i < 3; ++i) { cout << "layer " << i << ":" << endl; for (int j = 0; j < 4; ++j) { for (int k = 0; k < 5; ++k) cout << a[i][j][k] << ","; cout << endl; } } } void PrintB() { for (int i = 0; i < 3; ++i) { cout << "layer " << i << ":" << endl; for (int j = 0; j < 2; ++j) { for (int k = 0; k < 2; ++k) cout << b[i][j][k] << ","; cout << endl; } } } int main() { int No = 0; for (int i = 0; i < 3; ++i) { a[i]; for (int j = 0; j < 4; ++j) { a[j][i]; for (int k = 0; k < 5; ++k) a[i][j][k] = No++; a[j][i][i]; } } PrintA(); memset(a[1], -1, 20 * sizeof(int)); memset(a[1], -1, 20 * sizeof(int)); PrintA(); memset(a[1][1], 0, 5 * sizeof(int)); PrintA(); for (int i = 0; i < 3; ++i) for (int j = 0; j < 2; ++j) for (int k = 0; k < 2; ++k) b[i][j][k] = 10.0 / (i + j + k + 1); PrintB(); int n = a[0][1][2]; double f = b[0][1][1]; cout << "****" << endl; cout << n << "," << f << endl; return 0; }
输入
多组数据
每组数据两行第一行是两个整数 m 和 n
第二行先是一个整数k ,然后后面跟着k个整数
输出
对每组数据,按原顺序输出第二行的后k个整数中,大于m且小于n的数
输出两遍
数据保证一定能找到符合要求的整数
样例输入
1 3
1 2
2 8
5 1 2 3 4 9
样例输出
2,
2,
3,4,
3,4,
#include <iostream> #include <vector> using namespace std; struct A { int v; A() { } A(int n) :v(n) { }; bool operator<(const A& a) const { return v < a.v; } }; // 在此处补充你的代码 template<class T> class FilterClass { int m, n; public: FilterClass(int _m, int _n) :m(_m), n(_n) {} bool operator()(const T& a) { return T(m) < a&& a < n; } }; //———————————————————————————————— template <class T> void Print(T s, T e) { for (; s != e; ++s) cout << *s << ","; cout << endl; } template <class T1, class T2, class T3> T2 Filter(T1 s, T1 e, T2 s2, T3 op) { for (; s != e; ++s) { if (op(*s)) { *s2 = *s; ++s2; } } return s2; } ostream& operator <<(ostream& o, A& a) { o << a.v; return o; } vector<int> ia; vector<A> aa; int main() { int m, n; while (cin >> m >> n) { ia.clear(); aa.clear(); int k, tmp; cin >> k; for (int i = 0; i < k; ++i) { cin >> tmp; ia.push_back(tmp); aa.push_back(tmp); } vector<int> ib(k); vector<A> ab(k); vector<int>::iterator p = Filter(ia.begin(), ia.end(), ib.begin(), FilterClass<int>(m, n)); Print(ib.begin(), p); vector<A>::iterator pp = Filter(aa.begin(), aa.end(), ab.begin(), FilterClass<A>(m, n)); Print(ab.begin(), pp); } return 0; }
输入
无
输出
9.8,7.3,3.4,2.6,1.2,
#include <cstdio> #include <iostream> #include <algorithm> #include <list> using namespace std; int main() { double a[] = { 1.2,3.4,9.8,7.3,2.6 }; list<double> lst(a, a + 5); lst.sort( // 在此处补充你的代码 greater<double>() //—————————————————————————— ); for (list<double>::iterator i = lst.begin(); i != lst.end(); ++i) cout << *i << ","; return 0; }
输入
无
输出
5,21,14,2,3,
1.4–5.56–3.2–98.3–3.3–
#include <iostream> #include <list> #include <string> using namespace std; template <class T1, class T2> void Copy(T1 s, T1 e, T2 x) { for (; s != e; ++s, ++x) *x = *s; } template<class T> class myostream_iteraotr { // 在此处补充你的代码 string Oo; public: myostream_iteraotr(ostream& os, string out) :Oo(out) {} myostream_iteraotr& operator *() { return *this; } void operator =(T s) { cout << s << Oo; } void operator ++() {} //—————————————————————————————————————————— }; int main() { const int SIZE = 5; int a[SIZE] = { 5,21,14,2,3 }; double b[SIZE] = { 1.4, 5.56,3.2,98.3,3.3 }; list<int> lst(a, a + SIZE); myostream_iteraotr<int> output(cout, ","); Copy(lst.begin(), lst.end(), output); cout << endl; myostream_iteraotr<double> output2(cout, "--"); Copy(b, b + SIZE, output2); return 0; }
描述
写一个程序完成以下命令:
new id ——新建一个指定编号为id的序列(id<10000)
add id num——向编号为id的序列加入整数num
merge id1 id2——合并序列id1和id2中的数,并将id2清空
unique id——去掉序列id中重复的元素
out id ——从小到大输出编号为id的序列中的元素,以空格隔开
输入
第一行一个数n,表示有多少个命令( n<=200000)。以后n行每行一个命令。
输出
按题目要求输出。
样例输入
16
new 1
new 2
add 1 1
add 1 2
add 1 3
add 2 1
add 2 2
add 2 3
add 2 4
out 1
out 2
merge 1 2
out 1
out 2
unique 1
out 1
样例输出
1 2 3
1 2 3 4
1 1 2 2 3 3 4
1 2 3 4
#include<string> #include<iostream> #include<list> using namespace std; int main(void) { int n, pos, num; list<int>id[10000]; cin >> n; string cmd; while (n--) { cin >> cmd >> pos; if (cmd == "new") {} else if (cmd == "add") { cin >> num; id[pos].push_back(num); } else if (cmd == "merge") { cin >> num; id[pos].merge(id[num]); } else if (cmd == "unique") { id[pos].sort(); id[pos].unique(); } else { id[pos].sort(); for (list<int>::iterator it = id[pos].begin(); it != id[pos].end(); ++it) cout << *it << " "; cout << endl; } } return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。