C++程序设计POJ》《WEEK7 输入输出和模板》《编程作业》
题目网址:http://cxsjsxmooc.openjudge.cn/2018t3springw7/
1:简单的SumArray
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
填写模板 PrintArray,使得程序输出结果是: TomJackMaryJohn 10 不得编写SumArray函数
-
#include <iostream> #include <string> using namespace std; template <class T> T SumArray(
// 在此处补充你的代码
-
} int main() { string array[4] = { "Tom","Jack","Mary","John"}; cout << SumArray(array,array+4) << endl; int a[4] = { 1, 2, 3, 4}; //提示:1+2+3+4 = 10 cout << SumArray(a,a+4) << endl; return 0; }
- 输入
- 无
- 输出
- TomJackMaryJohn
10 - 样例输入
-
无
- 样例输出
-
TomJackMaryJohn 10
/* 简单的SumArray */ #include <iostream> #include <string> using namespace std; template <class T> T SumArray(T* a,T* b) { T tmp=*a; for (T* i=a+1;i<b;i++) { tmp += *i; } return tmp; // 在此处补充你的代码 } int main() { string array[4] = { "Tom","Jack","Mary","John" }; cout << SumArray(array, array + 4) << endl; int a[4] = { 1, 2, 3, 4 }; //提示:1+2+3+4 = 10 cout << SumArray(a, a + 4) << endl; return 0; }
2:简单的foreach
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
编写MyForeach模板,使程序按要求输出 不得编写 MyForeach函数
-
#include <iostream> #include <string> using namespace std;
// 在此处补充你的代码
-
void Print(string s) { cout << s; } void Inc(int & n) { ++ n; } string array[100]; int a[100]; int main() { int m,n; while(cin >> m >> n) { for(int i = 0;i < m; ++i) cin >> array[i]; for(int j = 0; j < n; ++j) cin >> a[j]; MyForeach(array,array+m,Print); cout << endl; MyForeach(a,a+n,Inc); for(int i = 0;i < n; ++i) cout << a[i] << ","; cout << endl; } return 0; }
- 输入
- 多组数据
每组数据第一行是两个整数 m 和 n ,都不超过 50
第二行是m个不带空格的字符串
第三行是 n个整数 - 输出
- 对每组数据
第一行输出所有输入字符串连在一起的结果
第二行输出输入中的每个整数加1的结果 - 样例输入
-
3 4 Tom Mike Jack 1 2 3 4 1 2 Peking 100 200
- 样例输出
-
TomMikeJack 2,3,4,5, Peking 101,201,
/* 2:简单的foreach */ #include <iostream> #include <string> using namespace std; template<class T1, class T2>
// 函数指针 void MyForeach(T1 begin, T1 end, T2 op) { for (T1 i = begin; i<end; i++) { op(*i); } } void Print(string s) { cout << s; } void Inc(int & n) { ++n; } string arrayNEW[100]; int a[100]; int main() { int m, n; while (cin >> m >> n) { for (int i = 0; i < m; ++i) cin >> arrayNEW[i]; for (int j = 0; j < n; ++j) cin >> a[j]; MyForeach(arrayNEW, arrayNEW + m, Print); cout << endl; MyForeach(a, a + n, Inc); for (int i = 0; i < n; ++i) cout << a[i] << ","; cout << endl; } return 0; } /* 3 4 Tom Mike Jack 1 2 3 4 1 2 Peking 100 200 */ /* 样例输出 TomMikeJack 2,3,4,5, Peking 101,201, */3:简单的Filter
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
编写Filter模板,使得程序产生指定输出 不得编写 Filter函数
-
#include <iostream> #include <string> using namespace std;
// 在此处补充你的代码
-
bool LargerThan2(int n) { return n > 2; } bool LongerThan3(string s) { return s.length() > 3; } string as1[5] = {"Tom","Mike","Jack","Ted","Lucy"}; string as2[5]; int a1[5] = { 1,2,3,4,5}; int a2[5]; int main() { string * p = Filter(as1,as1+5,as2,LongerThan3); for(int i = 0;i < p - as2; ++i) cout << as2[i]; cout << endl; int * p2 = Filter(a1,a1+5,a2,LargerThan2); for(int i = 0;i < p2-a2; ++i) cout << a2[i] << ","; return 0; }
- 输入
- 无
- 输出
- MikeJackLucy
3,4,5, - 样例输入
-
无
- 样例输出
-
MikeJackLucy 3,4,5,
/* 【3:简单的Filter】 */ #include <iostream> #include <string> using namespace std; // 在此处补充你的代码 template<class T1,class T2> T1 Filter(T1 begin, T1 end, T1 arr, T2 op) { int index = 0; for (T1 i = begin; i < end; i++) { if (op(*i)) { arr[index++] = *i; } } return (arr + index); } bool LargerThan2(int n) { return n > 2; } bool LongerThan3(string s) { return s.length() > 3; } string as1[5] = { "Tom","Mike","Jack","Ted","Lucy" }; string as2[5]; int a1[5] = { 1,2,3,4,5 }; int a2[5]; int main() { string * p = Filter(as1, as1 + 5, as2, LongerThan3); for (int i = 0; i < p - as2; ++i) cout << as2[i]; cout << endl; int * p2 = Filter(a1, a1 + 5, a2, LargerThan2); for (int i = 0; i < p2 - a2; ++i) cout << a2[i] << ","; return 0; }
4:你真的搞清楚为啥 while(cin >> n) 能成立了吗?
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
读入两个整数,输出两个整数 ,直到碰到-1
-
#include <iostream> using namespace std; class MyCin {
// 在此处补充你的代码
-
}; int main() { MyCin m; int n1,n2; while( m >> n1 >> n2) cout << n1 << " " << n2 << endl; return 0; }
- 输入
- 多组数据,每组一行,是两个整数
- 输出
- 对每组数据,原样输出
当碰到输入中出现-1 时,程序结束
输入中保证会有 -1 - 样例输入
-
12 44 344 555 -1 2 3
- 样例输出
-
12 44 344 555
/* 4:你真的搞清楚为啥 while(cin >> n) 能成立了吗? */ #include <iostream> using namespace std; class MyCin { // 在此处补充你的代码 public: int flag; //MyCin() :flag(0) {} istream& operator>>(int& x) // 为什么必须是引用??? { cin >> x; if (x == -1) { exit(0); } return cin; } }; int main() { MyCin m; int n1, n2; while (m >> n1 >> n2) cout << n1 << " " << n2 << endl; return 0; }