C/CPP基础练习题(二)简单循环(2 + 22 + 222…;斐波那契数列)

简单循环

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);
​
}
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CtrlCherry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值