1
#include <iostream> #include <string> bool Palindrome(const std::string &st); int main() { using namespace std; string s1; string s2; cout << "输入内容[\"quit\"退出]:\n"; while (getline(cin, s1) && s1 != "quit") { cout << s1; if (Palindrome(s1)) cout << " 是回文.\n"; else cout << " 不是回文.\n"; } cout << "再见\n"; system("pause"); return 0; } bool Palindrome(const std::string &st) { std::string temp(st.rbegin(), st.rend()); /* //另一个方法是使用copy,不过要先创建等同st大小的temp对象,temp=st; copy(st.rbegin(), st.rend(), temp.begin()); //拷贝 //还可以使用 temp.insert(temp.begin(), st.rbegin(), st.rend()); //插入 */ return st == temp; }
2
#include <iostream> #include <string> #include <cctype> bool Palindrome(const std::string &st); int main() { using namespace std; string s1; string s2; cout << "输入内容[\"quit\"退出]:\n"; while (getline(cin, s1) && s1 != "quit") { cout << s1; if (Palindrome(s1)) cout << " 是回文.\n"; else cout << " 不是回文.\n"; } cout << "再见\n"; system("pause"); return 0; } bool Palindrome(const std::string &st) { std::string temp1; for (int i = st.size() - 1; i >= 0; i--) { if (isalnum(st[i])) temp1 += tolower(st[i]); } std::string temp2(temp1.rbegin(), temp1.rend()); return temp1 == temp2; }
3
#include <iostream> #include <string> #include <cstdlib> #include <ctime> #include <cctype> #include <fstream> //文件头文件 #include <vector> using std::string; /* const int NUM = 26; const string wordlist[NUM] = { "apiary", "beetle", "cereal", "danger", "ensign", "florid", "garage", "health", "insult", "jackal", "keeper", "loaner", "manage", "nonce", "onset", "plaid", "quilt", "remote", "stolid", "train", "useful", "valid", "whence", "xenon", "yearn", "zippy" }; */ int main() { using namespace std; ifstream file; file.open("data.txt"); //打开数据文件 if (!file.is_open()) //如果打开失败退出 { cout << "无法打开数据文件\"data.txt\", 请检查...\n"; exit(EXIT_FAILURE); } vector<string> wordlist; string temps; while (file >> temps) wordlist.push_back(temps); const int NUM = wordlist.size(); if (file.eof()) cout << "读取了 " << NUM << " 个单词, 正常读取数据文件完成...\n"; else cout << "读取了 " << NUM << " 个单词, 未正常读取数据文件...\n"; srand(unsigned int(time(0))); char play; cout << "你会玩文字游戏吗?[y/n]\n"; cin >> play; play = tolower(play); while (play == 'y') { string target = wordlist[rand() % NUM]; //随机选取一个单词 int length = target.length(); //选取单词的长度 string attempt(length, '-'); //玩家的单词 string badchars; //错误选择字母记录 int guesses = 6; //错误机会 cout << "猜猜我的秘密单词. 它有 " << length << " 个字母, 你一次猜一个字母.\n你的游戏机会 " << guesses << " 次.\n"; cout << "你的单词: " << attempt << endl; while (guesses > 0 && attempt != target) { char letter; //临时猜测字母 cout << "猜一个字母:"; cin >> letter; if (badchars.find(letter) != string::npos || attempt.find(letter) != string::npos) { cout << "你已经猜到了. 再试一次.\n"; continue; } int loc = target.find(letter); //猜测字母处于单词的位置 if (loc == string::npos) { cout << "哦, 糟糕的猜测.\n"; --guesses; badchars += letter; } else { cout << "很好的猜测.\n"; attempt[loc] = letter; loc = target.find(letter, loc + 1); //检查是否还有同一个字母 while (loc != string::npos) { attempt[loc] = letter; loc = target.find(letter, loc + 1); } } cout << "你的单词: " << attempt << endl; if (attempt != target) { if (badchars.size() > 0) cout << "糟糕的选择: " << badchars << endl; cout << "剩下 " << guesses << " 次游戏机会\n"; } } if (guesses > 0) cout << "那就对了!\n"; else cout << "很抱歉,这个单词是 " << target << ".\n"; cout << "你会玩文字游戏吗?[y/n]\n"; cin >> play; play = tolower(play); } cout << "再见\n"; file.close(); //关闭文件 system("pause"); return 0; }
4
#include <iostream> #include <list> int reduce(long ar[], int n); int main() { using namespace std; const int SIZE = 10; long num[SIZE]; cout << "请输入10个数字, 我将返回没有重复的数字个数:\n"; for (int i = 0; i < SIZE; i++) cin >> num[i]; cout << "不重复的数字共有 " << reduce(num, SIZE) << " 个.\n"; system("pause"); return 0; } int reduce(long ar[], int n) { std::list<int> temp(ar, ar + n); temp.sort(); temp.unique(); return temp.size(); }
5
#include <iostream> #include <list> #include <string> template <typename T> int reduce(T ar[], int n); int main() { using namespace std; const int SIZE = 10; long num[SIZE]; cout << "请输入10个数字, 我将返回没有重复的数字个数:\n"; for (int i = 0; i < SIZE; i++) cin >> num[i]; cout << "不重复的数字共有 " << reduce(num, SIZE) << " 个.\n"; string words[SIZE]; cout << "请输入10个单词, 我将返回没有重复单词的个数:\n"; for (int i = 0; i < SIZE; i++) cin >> words[i]; cout << "不重复的单词共有 " << reduce(words, SIZE) << " 个.\n"; system("pause"); return 0; } template <typename T> int reduce(T ar[], int n) { std::list<T> temp(ar, ar + n); temp.sort(); temp.unique(); return temp.size(); }
6
#ifndef QUEUE_H_ #define QUEUE_H_ class Customer { private: long arrive; //到达客户的时间 int processtime; //为客户处理时间 public: Customer() { arrive = processtime = 0; } //保存客户到达时间和生成随机服务时间 void set(long when); // 返回客户到达时间 long when() const { return arrive; } // 返回客户服务时间 int ptime() const { return processtime; } }; typedef Customer Item; #endif
#include "Queue.h" #include <cstdlib> //保存客户到达时间和生成随机服务时间 void Customer::set(long when) { processtime = std::rand() % 3 + 1; arrive = when; }
#include <iostream> #include <cstdlib> // for rand() and srand() #include <ctime> // for time() #include <queue> #include "Queue.h" const int MIN_PER_HR = 60; bool newcustomer(double x); int main() { using std::cin; using std::cout; using std::endl; using std::ios_base; srand(unsigned int(time(0))); cout << "案例研究:希瑟银行自动柜员机\n"; cout << "输入队列的最大大小: "; int qs; cin >> qs; std::queue<Item> line; cout << "输入模拟小时数: "; int hours; // 模拟小时 cin >> hours; long cyclelimit = MIN_PER_HR * hours; // 模拟分钟 cout << "输入每小时的平均客户数量: "; double perhour; // 每小时客户数量 cin >> perhour; double min_per_cust; // 平均几分钟来一个客户 min_per_cust = MIN_PER_HR / perhour; Item temp; long turnaways = 0; // 拒绝人数 long customers = 0; // 加入人数 long served = 0; // 服务完人数 long sum_line = 0; // 队列总人数 int wait_time = 0; // 当前客户服务剩余时间 long line_wait = 0; // 客户到被服务的等待时间 int cycle; //当前分钟 for (cycle = 0; cycle < cyclelimit; cycle++) { if (newcustomer(min_per_cust)) // 是否有客户到来 { if (line.size() == qs) //判断队列是否已满 turnaways++; else { customers++; temp.set(cycle); line.push(temp); // line 插入新客户 } } if (wait_time <= 0 && !line.empty()) { temp = line.front(); //返回队首 line.pop(); //删除队首 wait_time = temp.ptime(); // 返回当前客户服务时间 line_wait += cycle - temp.when(); served++; } if (wait_time > 0) wait_time--; sum_line += line.size(); } if (customers > 0) { cout << "客户接受: " << customers << endl; cout << "客户服务: " << served << endl; cout << "总拒绝人数: " << turnaways << endl; cout << "平均队列大小: "; cout.precision(2); cout.setf(ios_base::fixed, ios_base::floatfield); cout << (double) sum_line / cyclelimit << endl; cout << "平均等待时间: " << (double) line_wait / served << " 分钟\n"; } else cout << "没客户!\n"; cout << "完成\n"; system("pause"); return 0; } bool newcustomer(double x) { return (std::rand() * x / RAND_MAX < 1); }
7
#include <iostream> #include <cstdlib> #include <vector> #include <algorithm> std::vector<int> Lotto(const int &a, const int &b); void Show(const int &t); int main() { using namespace std; vector<int> winners; winners = Lotto(33, 6); vector<int> blue; blue = Lotto(16, 1); cout << "红: "; for_each(winners.begin(), winners.end(), Show); cout.put('\t'); cout << "蓝: "; for_each(blue.begin(), blue.end(), Show); cout.put('\n'); system("pause"); return 0; } std::vector<int> Lotto(const int &a, const int &b) { std::vector<int> temp; std::vector<int> num; for (int i = 1; i <= a; i++) temp.push_back(i); for (int i = 0; i < b; i++) { random_shuffle(temp.begin(), temp.end()); //随机排序 num.push_back(*temp.begin()); } std::sort(num.begin(), num.end()); return num; } void Show(const int &t) { std::cout << t << " "; }
8
#include <iostream> #include <list> #include <string> #include <algorithm> void Show(const std::string &st); int main() { using namespace std; list<string> MatFriend; cout << "请输入 Mat 的朋友[\"quit\"退出]: \n"; string temp; while (getline(cin, temp) && temp != "quit") MatFriend.push_back(temp); list<string> PatFriend; cout << "请输入 Pat 的朋友[\"quit\"退出]: \n"; while (getline(cin, temp) && temp != "quit") PatFriend.push_back(temp); cout << "Mat 的朋友: \n"; for_each(MatFriend.begin(), MatFriend.end(), Show); cout.put('\n'); cout << "Pat 的朋友: \n"; for_each(PatFriend.begin(), PatFriend.end(), Show); cout.put('\n'); list<string> Friend; list<string>::iterator p; Friend = MatFriend; for (p = PatFriend.begin(); p != PatFriend.end(); p++) Friend.push_back(*p); Friend.sort(); //排序 Friend.unique(); //去除相邻重复值 cout << "Mat and Pat 共同朋友: \n"; for_each(Friend.begin(), Friend.end(), Show); cout.put('\n'); system("pause"); return 0; } void Show(const std::string &st) { std::cout << st << '\n'; }
9
#include <iostream> #include <vector> #include <list> #include <ctime> #include <algorithm> int main() { using namespace std; srand(unsigned int(time(0))); const int SIZE = 10000; vector<int> vi0; for (int i = 0; i < SIZE; i++) vi0.push_back(rand() % 10000 + 1); vector<int> vi(vi0); list<int> li; li.insert(li.end(), vi0.begin(), vi0.end()); //插入 clock_t start = clock(); sort(vi.begin(), vi.end()); clock_t end = clock(); cout << "vi 排序使用时间: " << (double)(end = start) / CLOCKS_PER_SEC << endl; start = clock(); li.sort(); end = clock(); cout << "li 排序使用时间: " << (double)(end = start) / CLOCKS_PER_SEC << endl; copy(vi0.begin(), vi0.end(), li.begin()); //重置li内容为vi0未排序 start = clock(); copy(li.begin(), li.end(), vi.begin()); sort(vi.begin(), vi.end()); copy(vi.begin(), vi.end(), li.begin()); end = clock(); cout << "li 复制到 vi 中, 对 vi 排序, vi 复制回 li 的使用时间: " << (double)(end = start) / CLOCKS_PER_SEC << endl; system("pause"); return 0; }
10
#include <iostream> #include <string> #include <vector> #include <algorithm> struct Review { std::string title; int rating; double price; }; bool operator<(const std::shared_ptr<Review> &r1, const std::shared_ptr<Review> &r2); bool worseThan(const std::shared_ptr<Review> &r1, const std::shared_ptr<Review> &r2); bool Price(const std::shared_ptr<Review> &r1, const std::shared_ptr<Review> &r2); bool FillReview(std::shared_ptr<Review> &rr); void ShowReview(const std::shared_ptr<Review> &rr); void menu(); int main() { using namespace std; vector<shared_ptr<Review>> books; shared_ptr<Review> temp; while (FillReview(temp)) books.push_back(temp); vector<shared_ptr<Review>> temps(books); //拷贝原始数据用于排序不打乱原始数据 char option; menu(); cout << "\n请输入选项: "; while (cin >> option && option != 'q') { if (books.size() > 0) { switch (option) { case '1': cout << "谢谢. 您输入了以下 " << books.size() << " 个书籍:\n" << "价格\t评分\t书名\n"; for_each(books.begin(), books.end(), ShowReview); break; case '2': cout << "谢谢. 您输入了以下 " << temps.size() << " 个书籍:\n"; sort(temps.begin(), temps.end()); //排序 cout << "价格\t评分\t书名\n"; for_each(temps.begin(), temps.end(), ShowReview); break; case '3': cout << "谢谢. 您输入了以下 " << temps.size() << " 个书籍:\n" ; sort(temps.begin(), temps.end(), worseThan); cout << "价格\t评分\t书名\n"; for_each(temps.begin(), temps.end(), ShowReview); break; case '4': cout << "谢谢. 您输入了以下 " << books.size() << " 个书籍:\n"; sort(temps.rbegin(), temps.rend(), worseThan); cout << "价格\t评分\t书名\n"; for_each(temps.begin(), temps.end(), ShowReview); break; case '5': cout << "谢谢. 您输入了以下 " << temps.size() << " 个书籍:\n"; sort(temps.begin(), temps.end(), Price); cout << "价格\t评分\t书名\n"; for_each(temps.begin(), temps.end(), ShowReview); break; case '6': cout << "谢谢. 您输入了以下 " << temps.size() << " 个书籍:\n"; sort(temps.rbegin(), temps.rend(), Price); cout << "价格\t评分\t书名\n"; for_each(temps.begin(), temps.end(), ShowReview); break; default: cout << "输入错误, 请输入 1 - 6 or q: \n"; break; } } else cout << "没有条目.\n"; while (cin.get() != '\n') continue; menu(); cout << "\n请输入选项: "; } cout << "再见\n"; system("pause"); return 0; } void menu() { using std::cout; using std::endl; cout << "**********书籍显示管理**********\n"; cout << "1. 按原始顺序显示 \t2. 按字母表顺序显示\n"; cout << "3. 按评级升序显示 \t4. 按评级降序显示\n"; cout << "5. 按价格升序显示 \t6. 按价格降序显示\n"; cout << "q. 退出\n"; cout << "********************************"; } bool operator<(const std::shared_ptr<Review> &r1, const std::shared_ptr<Review> &r2) { if (r1->title < r2->title) return true; else if (r1->title == r2->title&&r1->rating < r2->rating) return true; else return false; } bool Price(const std::shared_ptr<Review> &r1, const std::shared_ptr<Review> &r2) { if (r1->price < r2->price) return true; else return false; } bool worseThan(const std::shared_ptr<Review> &r1, const std::shared_ptr<Review> &r2) { if (r1->rating < r2->rating) return true; else return false; } bool FillReview(std::shared_ptr<Review> &rr) { rr = std::shared_ptr<Review>(new Review); std::cout << "输入书籍名称[\"quit\"退出]: "; getline(std::cin, rr->title); if (rr->title == "quit") return false; std::cout << "输入书籍评分: "; std::cin >> rr->rating; std::cout << "输入书籍价格: "; std::cin >> rr->price; if (!std::cin) return false; while (std::cin.get() != '\n') continue; return true; } void ShowReview(const std::shared_ptr<Review> &rr) { std::cout << rr->price << "\t" << rr->rating << "\t" << rr->title << std::endl; }