仅用函数实现C++程序:输入10个数并输出其值、总和与平均值
趣味C++编程挑战实现与优化
挑战内容
编写一个C++程序,需完成以下功能:
- 输入10个数字并展示它们
- 计算并显示这些数字的总和以及平均值
同时必须遵守以下限制:
- 不得使用任何显式定义的变量
- 不得使用任何数据结构
- 不得使用循环和条件语句
- 仅可使用函数,允许使用函数参数
当前接近要求的实现代码
#include <functional> #include <iostream> #include <string> using namespace std; int getSum( int suma ) { cin >> suma; return suma; } void message( int sum, int count, int limit ) { cout << "Sum = " << sum << endl; cout << "average = " << sum / limit; } void calculate( int sum, int count, int limit ) { sum = sum + getSum(sum ); function< void( int, int, int )> array[ 2 ] { message, calculate }; array[ limit > count - true + 1 ]( sum, ++count, limit ); } int main() { int amount = 3; std::cout << "Enter " << amount << " values: "; calculate( 0, 1, amount ); return 0; }
注:当前代码main函数中amount设为3,需改为10以匹配挑战要求。
代码逻辑说明
- 输入与累加技巧:在
sum + getSum(sum)操作中,利用C++执行机制,sum会保持原值参与运算,getSum仅负责读取输入值并返回——这里实际用到了getSum内部临时生成的变量,但未显式定义。 - 递归终止与分支控制:通过函数数组配合布尔值转索引的方式实现分支选择:当
limit > count时,计算得到的索引为1,会递归调用calculate函数并递增count;当count等于limit时,索引变为0,调用message函数输出结果,执行结束。
待优化点
当前实现仍使用了函数数组,需移除该数据结构以完全符合挑战限制。
内容的提问来源于stack exchange,提问作者Marce Puente
相关产品推荐
相关产品推荐

