统计练习 count.cpp

【简化题意】

给出一些字符串。求所有字符串中出现最多的字符串和出现次数。
时限3s


【分析】

map+string就可以水过这道题了,但貌似不是正解?
据说如果出一堆很长的字符串就可以把string卡掉(string按位比较速度较慢)。所以我们还有如下两种办法。

法一
Hash代替直接的string比较,离线排序或者在线map皆可。

法二
Trie树统计。一种非常正常的解法。

【code】

还是map水过算了

#include<map>
#include<string>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
map<string,int>mp;
string ans1;int ans2=0;
int n;
int main(){
	freopen("count.in","r",stdin);
	freopen("count.out","w",stdout);
	cin>>n;
	string s;
	for(int i=1;i<=n;i++){
		cin>>s,mp[s]++;
		if(ans2<=mp[s]) ans2=mp[s],ans1=s;
	}
	cout<<ans1<<" "<<ans2<<endl;
	return 0;
}
### C++ 中 `do...while` 循环的练习题与示例代码 以下是几个基于 `do...while` 的典型编程题目及其解决方案: #### 题目一:验证密码输入 编写一个程序,提示用户输入密码直到匹配为止。 ```cpp #include <iostream> using namespace std; int main() { string password = "secret"; string input; do { cout << "请输入密码: "; cin >> input; } while (input != password); cout << "密码正确!" << endl; return 0; } ``` 此代码通过 `do...while` 实现了至少一次的密码验证逻辑[^5]。 --- #### 题目二:累加器功能 创建一个程序,让用户不断输入数字并求和,当用户输入负数时停止操作。 ```cpp #include <iostream> using namespace std; int main() { int number, sum = 0; do { cout << "请输入一个正整数(输入负数结束): "; cin >> number; if (number >= 0) { sum += number; } } while (number >= 0); cout << "总和为: " << sum << endl; return 0; } ``` 上述实现展示了如何使用 `do...while` 来持续接收用户输入直至特定条件满足。 --- #### 题目三:菜单驱动的应用程序 设计一个小应用,提供选项供用户选择执行不同任务,只有当用户选择退出时才终止运行。 ```cpp #include <iostream> using namespace std; void taskOne() { cout << "执行任务1." << endl; } void taskTwo() { cout << "执行任务2." << endl; } int main() { int choice; do { cout << "\n请选择一项:\n" << "1. 执行任务1\n" << "2. 执行任务2\n" << "0. 退出\n" << "您的选择: "; cin >> choice; switch(choice) { case 1: taskOne(); break; case 2: taskTwo(); break; case 0: cout << "退出程序."; break; default: cout << "无效的选择!"; break; } } while (choice != 0); return 0; } ``` 这段代码体现了 `do...while` 在构建交互式界面中的作用。 --- #### 题目四:猜数字游戏 开发一款小游戏,随机生成一个介于 1 到 100 的整数,玩家需猜测该数值。如果错误,则给出提示继续尝试;一旦成功则显示祝贺消息。 ```cpp #include <iostream> #include <cstdlib> // rand(), srand() #include <ctime> // time() using namespace std; int main() { srand(time(0)); // 初始化随机种子 int target = rand() % 100 + 1; // 范围 [1, 100] int guess; do { cout << "猜一个数字 (1-100): "; cin >> guess; if (guess < target) { cout << "太低了!\n"; } else if (guess > target) { cout << "太高了!\n"; } } while (guess != target); cout << "恭喜你! 正确答案就是 " << target << "." << endl; return 0; } ``` 该游戏充分利用了 `do...while` 结构来确保至少有一次机会让玩家参与。 --- #### 题目五:统计字符数量 请求用户提供任意字符串,并逐一遍历其中每一个字母计数,最后展示总数。 ```cpp #include <iostream> using namespace std; int main() { char ch; int count = 0; cout << "请输入一些文字(按Ctrl+D结束):" << endl; do { cin.get(ch); // 获取单个字符包括空白符 if (!cin.eof()) { // 如果未到达文件结尾标志EOF ++count; } } while (!cin.eof()); cout << "您总共输入了 " << count << " 个字符。\n"; return 0; } ``` 这里运用了 `do...while` 处理流读取场景下的循环控制。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值