循环结构练习

本文通过六个实例详细介绍了C++编程中循环结构的应用,包括寻找数组最小值、计算平均数、递归计算木棍长度、打印数字直角三角形、计算骑士领取金币总数以及求等差数列和。每个实例都提供了清晰的代码实现和问题解释。

一.给出 n(n\le100)n(n≤100) 和 nn 个整数 a_i(0\le a_i \le 1000)ai​(0≤ai​≤1000),求这 nn 个整数中最小值是什么。

#include <stdio.h>

using namespace std;

int main()
{
    int n;
    scanf("%d",&n);
    int arr[n];
    for(int i=0;i<n;i++)
    {
        int m=0;
        scanf("%d",&m);
        arr[i]=m;
    }
    int x=1001;
    for(int j=0;j<n;j++)
    {
        if(x>arr[j])
        {
            x=arr[j];
        }
    }
    printf("%d\n",x); 
    return 0;
}

二.

给定 n(n\le10000)n(n≤10000) 和 k(k\le 100)k(k≤100),将从 1 到 nn 之间的所有正整数可以分为两类:A 类数可以被 kk 整除(也就是说是 kk 的倍数),而 B 类数不能。请输出这两类数的平均数,精确到小数点后 1 位,用空格隔开。

数据保证两类数的个数都不会是 0。

#include <stdio.h>

using namespace std;

int main()
{
    int n,k;
    scanf("%d%d",&n,&k);
    double A,B=0;
    int a,b=0;
    for(int i=1;i<=n;i++)
    {
        if(i%k==0)
        {
            A+=i;
            a+=1;
        }
        else
        {
            B+=i;
            b+=1;
        }
    }
    float c=A/a;
    float d=B/b;
    printf("%0.1f %0.1f",c,d);
    return 0;
}

三.《庄子》中说到,“一尺之棰,日取其半,万世不竭”。第一天有一根长度为 a(a\le 10^9)a(a≤109) 的木棍,从第二天开始,每天都要将这根木棍锯掉一半(每次除 2,向下取整)。第几天的时候木棍会变为 1?

#include <stdio.h>

using namespace std;

int main()
{
    int a;//输入木棍长度 
    scanf("%d",&a);
    int i=1;//设置计数器计数天数 
    while(a>1)
    {
        a/=2;
        i++;
    }
    printf("%d",i);
    return 0;
}

四.给出n(1\le n\le13)n(1≤n≤13),请输出一个直角边长度是 nn 的数字直角三角形。所有数字都是 2 位组成的,如果没有 2 位则加上前导 0。

#include <cstdio>

using namespace std;

int main()
{
    int n;
    scanf("%d",&n);
    int k=0; 
    for(int i=1;i<=n;i++)
    {
        for(int j=i;j<=n;j++)
        {
            k++;
            if(k<10)
            {
                printf("0");
            }
            printf("%d",k);
        }
        printf("\n");
    }
    return 0;
}

五.

国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天),每天收到三枚金币;之后四天(第七、八、九、十天),每天收到四枚金币……;这种工资发放模式会一直这样延续下去:当连续 nn 天每天收到 nn 枚金币后,骑士会在之后的连续 n+1n+1 天里,每天收到 n+1n+1 枚金币。

请计算在前 kk 天里,骑士一共获得了多少金币。

输入格式

一个正整数 kk,表示发放金币的天数。

输出格式

一个正整数,即骑士收到的金币数。

#include <cstdio>

using namespace std;

int main()
{
    int k;
    scanf("%d",&k);
    int n=0;//计算金币数 
    int a,b=1; //a指发放b金币的天数 
    for(int i=1;i<=k;)
    {
        for(a=1;(a<=b)&(i<=k);a++)
        {
            n+=b;
            i++;
        }
        b++;
    }
    printf("%d\n",n);
    return 0;
}

六.

计算 1+2+3+\cdots+(n-1)+n1+2+3+⋯+(n−1)+n 的值,其中正整数 nn 不大于 100。由于你没有高斯聪明,所以你不被允许使用等差数列求和公式直接求出答案。

输入格式

输出格式

#include <cstdio>

using namespace std;

int main()
{
    int n;
    scanf("%d",&n);
    int S=0;
    for(n;n>0;n--)
    {
        S+=n;
    }
    printf("%d",S);
    return 0;
}

七.

已知:S_n= 1+\frac{1}{2}+\frac{1}{3}+…+\frac{1}{n}Sn​=1+21​+31​+…+n1​。显然对于任意一个整数 kk,当 nn 足够大的时候,S_n>kSn​>k。

现给出一个整数 kk,要求计算出一个最小的 nn,使得 S_n>kSn​>k。

输入格式

一个正整数 k。

输出格式

一个正整数 n。

说明/提示

【数据范围】

对于 100% 的数据,1≤k≤15。

#include <cstdio>

using namespace std;

int main()
{
    int k;
    scanf("%d",&k);
    double Sn=0;
    int n;
    for(n=1;n>0;n++)
    {
        Sn+=1.0/n;
        if(Sn>k)
        {
            break;
        }
    }
    printf("%d\n",n);
    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值