- C++
投票统计工具
- 2025-5-31 15:36:18 @
投票统计工具
题目描述
实现一个简单的投票统计工具,投票规则如下:
- 投票同意的人输入
1
- 反对的人输入
0
- 输入
-1
表示投票结束
根据投票结果输出:
- 同意人数超过反对人数时输出
Yes
- 反对人数超过同意人数时输出
No
- 双方人数相等时输出
Tie
输入格式
一行中给出一系列投票值,以 -1
结束。
1
表示同意0
表示反对-1
表示投票结束
输出格式
- 第一行输出投票结果:
Yes
、No
或Tie
- 第二行输出同意人数和反对人数,用冒号
:
分隔
样例
样例输入1
1 0 0 1 1 -1
样例输出1
Yes
3:2
样例输入2
0 0 0 1 -1
样例输出2
No
1:3
样例输入3
1 1 1 0 0 0 -1
样例输出3
Tie
3:3
3 条评论
-
admin SU @ 2025-5-31 16:09:01
代码解释
这段C++程序实现了一个简单的投票统计工具,以下是对代码的详细解释:
#include<iostream> using namespace std; int main(){ int tongyi = 0; // 存储同意的人数 int fandui = 0; // 存储反对的人数 // 无限循环读取投票值,直到遇到-1结束 while(true){ int a; // 用于接收用户输入的投票值 cin>>a; // 读取输入 // 当输入为-1时,跳出循环结束投票 if(a == -1){ break; } // 统计同意票数 if(a == 1){ tongyi += 1; } // 统计反对票数 if(a == 0){ fandui += 1; } } // 判断投票结果并输出 if(tongyi > fandui){ cout<<"Yes"<<endl; }else if(tongyi < fandui){ cout<<"No"<<endl; }else{ cout<<"Tie"<<endl; } // 输出同意和反对的具体票数 cout<<tongyi<<":"<<fandui<<endl; return 0; }
程序工作流程
-
初始化计数器:
tongyi
变量用于记录同意票数(输入为1)fandui
变量用于记录反对票数(输入为0)
-
投票输入循环:
- 使用
while(true)
创建无限循环持续读取输入 - 每次读取一个整数
a
- 若
a
为-1
,则使用break
语句跳出循环结束投票 - 若
a
为1
,同意票数tongyi
加1 - 若
a
为0
,反对票数fandui
加1
- 使用
-
结果判断与输出:
- 比较
tongyi
和fandui
的大小 - 输出相应结果(Yes/No/Tie)
- 按格式输出具体票数(例如
3:2
)
- 比较
关键点说明
-
输入处理:
- 使用
-1
作为结束标记,这是常见的输入终止方式 - 程序会忽略除0、1、-1之外的其他输入值(不会对其进行计数)
- 使用
-
统计逻辑:
- 通过两个独立的
if
语句分别统计同意和反对票 - 这种实现方式清晰直观,易于理解和维护
- 通过两个独立的
-
输出格式:
- 严格按照题目要求的格式输出结果和票数
- 使用冒号
:
分隔同意和反对的票数
这个程序结构简单,逻辑清晰,能够正确处理投票统计的核心需求。
-
-
2025-5-31 15:57:25@
投票统计工具解题思路
一、问题分析
- 核心任务:统计投票数据中同意(1)和反对(0)的票数,根据票数对比结果输出相应结论。
- 输入特点:输入以
-1
作为结束标志,需处理不定长度的输入数据。 - 输出要求:分两行输出结果(结论和票数对比),格式需严格符合要求。
二、解题步骤拆解
1. 数据存储与输入处理
- 方案选择:
- 不存储数据:直接统计票数(适用于无需保存历史数据的场景)。
- 存储数据:用数组或容器保存所有投票值(适用于需要后续数据处理的场景)。
- 输入处理逻辑:
- 循环读取输入值,直到遇到
-1
时终止。 - 过滤无效输入(非0、1、-1的值可忽略)。
- 循环读取输入值,直到遇到
2. 票数统计逻辑
- 维护两个计数器
yes_count
(同意票数)和no_count
(反对票数)。 - 遍历输入数据(或直接在输入时统计),遇到
1
则yes_count++
,遇到0
则no_count++
。
3. 结果判断与输出
- 比较
yes_count
和no_count
:- 若
yes_count > no_count
,输出Yes
。 - 若
yes_count < no_count
,输出No
。 - 若
yes_count == no_count
,输出Tie
。
- 若
- 按格式输出票数对比(如
3:2
)。
三、两种实现方案(以C++为例)
方案1:直接统计(不存储数据)
#include <iostream> using namespace std; int main() { int yes = 0, no = 0; int vote; while (cin >> vote && vote != -1) { // 读取输入直到-1 if (vote == 1) yes++; else if (vote == 0) no++; } // 判断结果 if (yes > no) cout << "Yes\n"; else if (yes < no) cout << "No\n"; else cout << "Tie\n"; // 输出票数 cout << yes << ":" << no << endl; return 0; }
- 优势:代码简洁,无需额外空间存储投票数据。
- 适用场景:仅需统计结果,无需保留历史投票记录。
方案2:数组存储(适用于需要数据回溯的场景)
#include <iostream> using namespace std; int main() { const int MAX_SIZE = 1000; int votes[MAX_SIZE]; int count = 0; int vote; // 读取投票并存储 while (cin >> vote && vote != -1 && count < MAX_SIZE) { votes[count++] = vote; } // 统计票数 int yes = 0, no = 0; for (int i = 0; i < count; i++) { if (votes[i] == 1) yes++; else if (votes[i] == 0) no++; } // 输出结果(同上) if (yes > no) cout << "Yes\n"; else if (yes < no) cout << "No\n"; else cout << "Tie\n"; cout << yes << ":" << no << endl; return 0; }
- 优势:可保存所有投票数据,便于后续扩展(如查看投票历史、排序等)。
- 注意事项:需设定数组最大长度,避免越界。
四、关键细节处理
- 输入终止条件:必须严格以
-1
作为结束标志,其他值(如0、1)需正常处理。 - 无效输入过滤:若输入非0、1、-1(如2、-2),程序应忽略该值,不影响统计结果。
- 边界情况:
- 无有效投票时(如输入
-1
):yes=0
,no=0
,输出Tie
和0:0
。 - 全为无效输入时(如
2 3 -1
):处理逻辑同上。
- 无有效投票时(如输入
五、算法复杂度分析
- 时间复杂度:O(n),其中 n 为有效投票数(需遍历所有输入值)。
- 空间复杂度:
- 方案1:O(1)(仅使用几个计数器变量)。
- 方案2:O(n)(需存储所有投票值,n 为最大投票数)。
六、扩展思路
- 优化输入处理:使用
vector
替代固定长度数组,动态扩展存储容量。 - 增加异常处理:如限制投票人数、提示输入格式错误等。
- 功能扩展:添加投票结果可视化(如百分比显示)、投票历史查询等功能。
-
2025-5-31 15:38:24@
根据你的需求,下面是使用C++实现的投票统计工具,使用数组来存储投票结果:
#include <iostream> using namespace std; int main() { const int MAX_VOTES = 1000; // 最大投票数 int votes[MAX_VOTES]; // 存储投票结果的数组 int count = 0; // 实际投票数 // 读取投票直到输入-1 cout << "请输入投票结果(1=同意,0=反对,-1=结束):" << endl; int vote; while (true) { cin >> vote; if (vote == -1) break; // 结束投票 if (count < MAX_VOTES) { votes[count] = vote; // 存储有效投票 count++; } else { cout << "投票数已达到最大值!" << endl; break; } } // 统计票数 int yesCount = 0; int noCount = 0; for (int i = 0; i < count; i++) { if (votes[i] == 1) { yesCount++; } else if (votes[i] == 0) { noCount++; } // 忽略其他无效值(非0非1) } // 输出结果 if (yesCount > noCount) { cout << "Yes" << endl; } else if (yesCount < noCount) { cout << "No" << endl; } else { cout << "Tie" << endl; } cout << yesCount << ":" << noCount << endl; return 0; }
代码说明:
-
数组存储投票结果:
- 使用
int votes[MAX_VOTES]
数组存储所有有效投票 count
变量记录实际投票数量
- 使用
-
输入处理:
- 通过循环持续读取输入,直到遇到-1
- 验证投票数不超过数组最大容量
-
统计逻辑:
- 遍历数组统计同意(
1
)和反对(0
)的票数 - 忽略无效输入(非0和1的值)
- 遍历数组统计同意(
-
结果输出:
- 根据统计结果输出"Yes"、"No"或"Tie"
- 按格式输出具体票数
使用示例:
输入:
1 0 0 1 1 -1
输出:
Yes 3:2
这个实现使用数组存储所有投票结果,相比原方案增加了数据存储功能,方便后续可能的扩展需求,如查看历史投票记录等。
-
- 1