C/CPP 基础练习题(二)简单循环(2 + 22 + 222…;斐波那契数列)
作者:CtrlX
- 2022 年 8 月 27 日 山东
本文字数:2308 字
阅读完需:约 8 分钟
简单循环
1. 求平均年龄
01 星球有学长若干名, 给出每个学长的年龄, 求 01 星球学长的平均年龄, 保留小数点后两位
输入:
第一行: 整数 n(1<n<100), 表示人数
之后 n 行: 每行一个整数 a(15<a<55), 表示第 n 个学长的年龄
输出:
一个浮点数, 保留两位小数. 表示 01 星球学长平均年龄
样例输入:
3
18
18
17
样例输出:
17.67
2. 张三上课时走神, 在作业上写了很多222222222222222 结果被老师发现了
张三连忙掩饰说自己在算2+22+222+2222+22222的和,
老师很欣慰, 问他算出来没有
张三很困扰, 因为草稿纸写满了2 已经不够用了
大家快帮帮张三吧
设计一个程序, 输入n和a 求Sn
Sn = a + aa + aaa + … + aaaaa(n个a)
输入: 两个整数n, a
(1<n<9), (1<=a<=9)
输出:
Sn的值
样例输入:
5 2
样例输出:
24690
样例解析: Sn = 2 + 22 + 222 + 2222 + 22222 = 24690
样例输入:
4 5
样例输出:
6170
样例解析: Sn = 5 + 55 + 555 + 5555
复制代码
3. super家养了一对刚出生的兔子, 兔子出生3个月起每月都会生一对小兔子, 小兔子出生后三个月起也会每月生一对兔子
super想知道 如果兔子不死 n月后家里会有多少对兔子
设计一个程序: 输入n, 输出兔子数量
(2<n<30)
样例输入: 7
样例输出:13
样例输入: 12
样例输出: 144
复制代码
4. 云海学长为了探究神秘的物理现象, 从高楼抛下一个弹球 但由于高空抛物被警察抓了, 请各位小伙伴完成他未完成的心愿
小球从某一高度落下,每次落地后反跳回原来高度的一半,再落下。
输入弹球的初始高度M和回弹次数N, 输出弹球第N次回弹后的高度 和达到该高度后所经过的距离(保留两位小数)
(0<M<1000, 0<N<50)
样例输入
1000 5
样例输出
31.25
2906.25
复制代码
解答
1.求平均年龄
#include<iostream>
using namespace std;
float Age(int n)
{
float num = 0;
for (int i = 0; i < n; i++)
{
float age = 0;cin >> age;
num += age;
}
return num/n;
}
int main()
{
cout << "Input:";
int n = 0; cin >> n;
cout<<Age(n)<<endl;
system("pause"); return 0;
}
复制代码
// 求平均年龄
void Demo31() {
//--变量声明--
// 人数, 临时记录变量, 学长的年龄总和
int n, temp = 0;
double age = 0;
//--接收输入--
// 注意这里age+=temp 也就是存储了所有学长年龄的和
scanf_s("%d", &n);
for (int i = 0; i < n; i++) {
scanf_s("%d", &temp);
age += temp;
}
//--数据处理--
age /= n;
//--输出--
printf("%.2lf", age);
}
复制代码
✨2.数列求和
#include<iostream>
using namespace std;
//思路:利用数列求和
//1:10/9=1,100/9=11,1000/9=111
//2:求类似于2 + 22 + 222 + 2222 + 22222 +……可以转化成2*(1 + 11 + 111 + 1111 +……)
int Sum(int a, int n)
{
//计算1 + 11 + 111 + 1111 +……
int num = 0;
for (int i = 1; i <= a; i++)
{
int b = 1;
for (int j = 0; j < i; j++)//循环乘以10
{
b *= 10;
}
num += b / 9;
}
//返回n*(1 + 11 + 111 + 1111 +……)
return num * n;
}
int main()
{
cout << "Input:"<< endl;
int a = 0,n = 0; cin >> a; cin >> n;
cout << Sum(a, n) << endl;
system("pause"); return 0;
}
复制代码
#include<iostream>
using namespace std;
int Sum(int a, int n)
{
int num = 0,count = n;
for (int i = 1; i <= a; i++)
{
num += count;
count = count * 10 + n;
}
return num ;
}
int main()
{
cout << "Input:" << endl;
int a = 0, n = 0; cin >> a; cin >> n;
cout << Sum(a, n) << endl;
system("pause"); return 0;
}
复制代码
// 求2222222
void Demo32() {
//--变量声明--
// 输入n, 输入a, 累加数存储变量, 答案存储变量
int n, a;
int num, result = 0;
//--接收输入--
scanf_s("%d %d", &n, &a);
num = a;
//--数据处理--
/*
num用于存储a,aa,aaa这样的数字
num = aaa
num*10 = aaa0
num*10+a = aaaa
*/
for (int i = 0; i < n; i++) {
result += num;
num = num * 10 + a;
}
//--输出--
printf("%d", result);
}
复制代码
3.斐波那契数列
#include<iostream>
using namespace std;
int Sum(int n)
{
int a = 0, b = 1;
if (n == 1 && n == 2) { return 1; }
else
{
for (int i = 0; i < n; i++)
{
int temp = a + b;
a = b;
b = temp;
}
return a;
}
}
int main()
{
cout << "Input:";
int n = 0; cin >> n;
cout << Sum( n) << endl;
system("pause"); return 0;
}
复制代码
// 数兔子
void Demo33() {
//--变量声明--
// 用户输入值 月数
int n;
// 用于存储当月 以及前1,2个月的兔子数
int m1 = 1, m2 = 1, m3 = 0;;
//--接收输入--
scanf_s("%d", &n);
//--数据处理--
//前两个月不生兔子
// 每个月的兔子数量 = 上一个月兔子数 + 上上一个月兔子数
n -= 2;
while (n--) {
m3 = m1 + m2;
m1 = m2;
m2 = m3;
}
//--输出--
printf("%d", m3);
}
复制代码
✨4.抛物问题
// 弹球
void Demo34() {
//--变量声明--
// 初始条件
int N, M;
// 高度和距离
double h, l = 0;
//--接收输入--
scanf_s("%d %d", &M, &N);
h = M;
//--数据处理--
while(N--){
h /= 2;
l += h * 3;//大的等于两个小的 + 一个小的
}
//--输出--
printf("%.2lf, %.2lf", h, l);
}
复制代码
划线
评论
复制
发布于: 刚刚阅读数: 7
版权声明: 本文为 InfoQ 作者【CtrlX】的原创文章。
原文链接:【http://xie.infoq.cn/article/6970da13c16926780a822cbc9】。文章转载请联系作者。
CtrlX
关注
Pain is inevitable,suffering is optional 2022.08.01 加入
【个人网站】ctrlx.life 【联系方式】微信:gitctrlx 【软件技能】前端,C++,Python,研究网络工程,数据结构与算法。
评论