2023-2024-1高级语言程序设计-循环结构

7-1计算值控制的循环 求π的近似值

用公式求π的近似值:π2/6=1+1/22+1/32+1/42+。。。
当求和项小于误差时,结束求和。

输入格式:

在一行输入误差范围

输出格式:

在一行输出π的近似值(保留6位小数)。

输入样例:

在这里给出一组输入。例如:

0.00000001

输出样例:

在这里给出相应的输出。例如:

3.141497
#include
using namespace std;
int main(){
    double s,x,a;
    cin>>a;
    for(int i=1;;i++){
        x=1.0/(i*i);
        if(x

 

7-2计算值控制的循环 π的近似值

本题目要求编写程序,利用4π​=1−31​+51​−71​+...计算π的近似值,直到最后一项的绝对值小于eps时为止,输出π的值。

输入格式:

在一行中键盘输入精度eps(eps<=1e-2)。

输出格式:

在一行中输出pi=S,S为eps精度下π的近似值,结果保留小数点后6位。

输入样例:

0.0001

输出样例:

pi=3.141793
#include
using namespace std;
int main(){
    double s=1,x=1,a;int k=-1;
    cin>>a;
    for(int i=3;;i+=2){
        if(abs(x)

 7-3计算值控制的循环 泰勒展开式求sinx近似

用泰勒展开式求sinx近似值的多项式为:

输入x求sinx的近似值,要求误差不大于0.00001。

输入格式:

直接输入一个实型数据。没有其它任何附加字符。

输出格式:

直接输出保留3位小数的实型结果。

输入样例:

2.5

输出样例:

0.598
#include
using namespace std;
int main(){
     double x,y,s,z=1;int i,j=1,k=1;
    cin>>x;
    do{
        z=1;
    for(i=1;i<=j;i++)
        z*=i;
        y=pow(x,j)*k/z;
        s+=y;
        j+=2;k*=-1;
    }while(abs(y)>=0.00001);
        printf("%.3f",s);
    return 0;
}

 7-4 break 求最小的n,满足n的阶乘大于等于x。

求最小的n,满足n的阶乘大于等于x,其中x为非负整数,由用户输入。例如,当输入110时,输出5 120 , 其中 5 为最小的n,120 为5的阶乘

输入格式:

请在这里写输入格式。例如:输入一个正整数 110。

输出格式:

请在这里描述输出格式。例如:输出最小的n 和n的阶乘,即 5 120。

输入样例:

在这里给出一组输入。例如:

110

输出样例:

在这里给出相应的输出。例如:

5 120
#include
using namespace std;
int main(){
    long int n,x=1,y=1;
    cin>>n;
    while(y

 7-6 break 爬动的蠕虫

一条蠕虫长1寸,在一口深为N寸的井的底部。已知蠕虫每1分钟可以向上爬U寸,但必须休息1分钟才能接着往上爬。在休息的过程中,蠕虫又下滑了D寸。就这样,上爬和下滑重复进行。请问,蠕虫需要多长时间才能爬出井?

这里要求不足1分钟按1分钟计,并且假定只要在某次上爬过程中蠕虫的头部到达了井的顶部,那么蠕虫就完成任务了。初始时,蠕虫是趴在井底的(即高度为0)。

输入格式:

输入在一行中顺序给出3个正整数N、U、D,其中D

输出格式:

在一行中输出蠕虫爬出井的时间,以分钟为单位。

输入样例:

12 3 1

输出样例:

11
#include
using namespace std;
int main(){
    int a,b,c,x=1,y=0;
    cin>>a>>b>>c;
     while(1){
         x+=b;
         y++;
         x-=c;
         y++;
         if(x>=a)break;
     }cout<

 

7-6输入值控制循环 统计一批学生的平均成绩与不及格人数

本题要求编写程序,计算学生们的平均成绩,并统计不及格(成绩低于60分)的人数。题目保证输入与输出均在双精度范围内。

输入格式:

输入在一行中给出一系列非负实数,其间以空格分隔。当读到负实数时,表示输入结束,该数字不要处理。

输出格式:

按照以下格式输出:

Average = 成绩均值
Count = 不及格人数

其中平均值精确到小数点后两位,等号的左右各有一个空格。

输入样例1:

67 88 73 54 95 60 0 -1

输出样例1:

Average = 62.43
Count = 2

输入样例2:

-100 90 80 0

输出样例2:

Average = 0.00
#include
using namespace std;
int main(){
    int a,x=0,y;double s=0;
    while(cin>>a){
        if(a<0)break;
        if(a<60)x++;
        y++;
        s+=a;
    }
    if(y==0)cout<<"Average = 0.00";
    else printf("Average = %.2f\nCount = %d",s*1.0/y,x);
    return 0;
}

 7-7输入值控制循环 一批数中最大值最小值

从键盘输入若干学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时循环结束。。

输入格式:

在一行中输入若干个用空格间隔的整数(不要超过15个数),最后输入负数结束输入,数据之间只能用1个空格间隔。

输出格式:

在一行中按照“max=最高分,min=最低分”的格式输出结果,最高分和最低分均原样输出,没有列宽控制。

输入样例:

58 78 95 65 86 -1

输出样例:

max=95,min=58
#include
using namespace std;
int main(){
    int a,x=0,y=100; 
    while(cin>>a){
        if(a<0)break;
        if(xa)y=a;
    }
     cout<<"max="<

 7-8输入值控制循环 统计奇偶

从键盘输入一批正整数(输入-1结束),统计有多少奇数,多少偶数。

输入格式:

输入一批正整数,以空格分隔,以-1结束,-1 仅仅代表结束标志,不算作真正数据,一批数据中仅仅会在最后出现-1。

输出格式:

分别统计奇数和偶数的个数,然后输出,按如下格式:

Odds=4
Evens=5

输入样例:

在这里给出一组输入。例如:

5 2 8 9 4 7 6 3 10 -1

输出样例:

在这里给出相应的输出。例如:

Odds=4
Evens=5

 

#include
using namespace std;
int main(){
    int a,x=0,y=0; 
    while(cin>>a){
        if(a==-1)break;
        if(a%2)x++;
        else y++;
    }
     cout<<"Ddds="<

7-9计算值控制的循环 统计一个整数的位数

本题要求编写程序,对于给定的整数N,求它的位数。

输入格式:

输入在一行中给出一个绝对值不超过109的整数N。

输出格式:

在一行中输出N的位数。

输入样例1:

12534

输出样例1:

5

输入样例2:

-987600321

输出样例2:

9

输入样例3:

0

输出样例3:

1
#include
using namespace std;
int main(){
     string s;
    cin>>s;
    if(s[0]=='-')cout<

 7-10计算值控制的循环 输出一个整数的逆序数

对于给定的整数N,输出其逆序数。

输入格式:

输入在一行中给出一个绝对值不超过109的整数N。

输出格式:

在一行中输出N的逆序数。

输入样例:

-12340

输出样例:

-4321
#include
using namespace std;
int main(){
     string s;int n;
    cin>>n;
    if(n==0){cout<<"0";return 0;}
        s=to_string(n);
    int k=0;
    if(s[0]=='-')cout<<"-";
     for(int i=s.size()-1;i>=0;i--){
         if(s[i]=='-')continue;
if(s[i]=='0'&&k==0)continue;
         if(s[i]!='0')k=1;
          cout<

7-11 break 判断一个整数是否为素数

本题要求编写程序,判断一个给定的整数是否为素数。素数就是只能被1和自身整除的正整数,1不是素数,2是素数。

输入格式:

输入在一行中给出一个需要判断的整数 M(−231≤M≤231−1)。

输出格式:

如果M是素数,则在一行中输出Yes,否则输出No。如果输入了非正整数,也要输出No

输入样例1:

11

输出样例1:

Yes

输入样例2:

9

输出样例2:

No

输入样例3:

-2

输出样例3:

No
#include
using namespace std;
int main(){
     int m,i,k=0;
    cin>>m;
    if(m<=1)k=1;
    for(i=2;i<=sqrt(m);i++)
        if(m%i==0)k=1;
    if(k==0)cout<<"Yes";
    else cout<<"No";
    return 0;
}

 

7-12 迭代 兔子繁殖问题

已知有一对兔子,每个月可以生一对兔子,而小兔子一个月后又可以生一对小兔子(比如:2月份出生的小兔子4月份可以生育)。也就是说,兔子的对数为:第一个月1对,第二个月2对,第三个月3对,第四个月5对.....假设兔子的生育期为两年,且不死。那么问题来了,你能说出每个月的兔子数么?

输入格式:

输入一个数n,表示第n个月,1<=n<=24。

输出格式:

输出这个月兔子的数目。

输入样例:

4

输出样例:

5
#include
using namespace std;
int main(){
      int n,i,a[25];
    cin>>n;
    a[1]=1;a[2]=2;
    for(i=3;i<=n;i++)a[i]=a[i-2]+a[i-1];
    cout<

 7-13 穷举 穷举问题-搬砖

某工地需要搬运砖块,已知男人一人搬3块,女人一人搬2块,小孩两人搬1块。如果想用n人正好搬n块砖,问有多少种搬法?

输入格式:

输入在一行中给出一个正整数n

输出格式:

输出在每一行显示一种方案,按照"men = cnt_m, women = cnt_w, child = cnt_c"的格式,输出男人的数量cnt_m,女人的数量cnt_w,小孩的数量cnt_c。请注意,等号的两侧各有一个空格,逗号的后面也有一个空格。

如果找不到符合条件的方案,则输出"None"

输入样例:

45

输出样例:

men = 0, women = 15, child = 30
men = 3, women = 10, child = 32
men = 6, women = 5, child = 34
men = 9, women = 0, child = 36
#include
using namespace std;
int main(){
       int n,i,j,k,x=0;
    cin>>n;
    for(i=0;i<=n/3;i++){
        for(j=0;j<=n/2;j++){
            for(k=0;k<=2*n;k++){
                if(((i*3+2*j+k/2.0)==n)&&(i+j+k==n))
                   { printf("men = %d, women = %d, child = %d\n",i,j,k);x=1;}
            }
        }
    }if(x==0)cout<<"None";
    return 0;
}

 7-14穷举 百钱买百鸡问题(升级版-N钱买N鸡)

百钱买百鸡问题:公鸡五文钱一只,母鸡三文钱一只,小鸡三只一文钱,用100文钱买100只鸡,公鸡、母鸡、小鸡各买多少只?

本程序要求解的问题是:给定一个正整数n,用n文钱买n只鸡,问公鸡、母鸡、小鸡各买多少只?

输入格式:

输入一个正整数n(n<=100)。

输出格式:

如果有解,种组合占一行,包含公鸡、母鸡、小鸡的个数,用正整数表示,每个数据占4列。公鸡母鸡小鸡个数均大于等于0,按公鸡数目从小到大输出,公鸡数目相同按母鸡数目从小到大输出,以此类推。如果无解,输出No Answer

输入样例:

在这里给出一组输入。例如:

100

输出样例:

在这里给出相应的输出。例如:

   0  25  75
   4  18  78
   8  11  81
  12   4  84
#include
using namespace std;
int main(){
       int n,i,j,k,x=0;
    cin>>n;
    for(i=0;i<=n/5;i++){
        for(j=0;j<=n/3;j++){
            for(k=0;k<=3*n;k++){
                if(((i*5+3*j+k/3.0)==n)&&(i+j+k==n))
                   { printf("%4d%4d%4d\n",i,j,k);x=1;}
            }
        }
    }if(x==0)cout<<"No Answer";
    return 0;
}

 

7-15 穷举 韩信点兵

在中国数学史上,广泛流传着一个“韩信点兵”的故事:韩信是汉高祖刘邦手下的大将,他英勇善战,智谋超群,为汉朝建立了卓越的功劳。据说韩信的数学水平也非常高超,他在点兵的时候,为了知道有多少兵,同时又能保住军事机密,便让士兵排队报数:

  • 按从1至5报数,记下最末一个士兵报的数为1;
  • 再按从1至6报数,记下最末一个士兵报的数为5;
  • 再按从1至7报数,记下最末一个士兵报的数为4;
  • 最后按从1至11报数,最末一个士兵报的数为10;

请编写程序计算韩信至少有多少兵。

输入格式:

本题无输入

输出格式:

输出韩信至少拥有的士兵人数。

#include
using namespace std;
int main(){
        for(int i=1;;i++){
            if(i%5==1&&i%6==5&&i%7==4&&i%11==10){
                cout<

7-16嵌套循环 打印九九口诀表

下面是一个完整的下三角九九口诀表:

1*1=1   
1*2=2   2*2=4   
1*3=3   2*3=6   3*3=9   
1*4=4   2*4=8   3*4=12  4*4=16  
1*5=5   2*5=10  3*5=15  4*5=20  5*5=25  
1*6=6   2*6=12  3*6=18  4*6=24  5*6=30  6*6=36  
1*7=7   2*7=14  3*7=21  4*7=28  5*7=35  6*7=42  7*7=49  
1*8=8   2*8=16  3*8=24  4*8=32  5*8=40  6*8=48  7*8=56  8*8=64  
1*9=9   2*9=18  3*9=27  4*9=36  5*9=45  6*9=54  7*9=63  8*9=72  9*9=81  

本题要求对任意给定的一位正整数N,输出从1*1N*N的部分口诀表。

输入格式:

输入在一行中给出一个正整数N(1≤N≤9)。

输出格式:

输出下三角N*N部分口诀表,其中等号右边数字占4位、左对齐。

输入样例:

4

输出样例:

1*1=1   
1*2=2   2*2=4   
1*3=3   2*3=6   3*3=9   
1*4=4   2*4=8   3*4=12  4*4=16  
#include
using namespace std;
int main(){
         int n,i,j;
    cin>>n;
    for(i=1;i<=n;i++){
        for(j=1;j<=i;j++){
            printf("%d*%d=%-4d",j,i,i*j);
        }
        cout<

 

7-17嵌套循环 数字金字塔

输入正整数n,输出n层数字金字塔。

输入格式:

正整数n,1<=n<=9。

输出格式:

n层的金字塔,其中第1层的“1”在第1行的第39列(列从1开始计数)。

输入样例:

5

输出样例:

                                      1
                                     121
                                    12321
                                   1234321
                                  123454321
#include
using namespace std;
int main(){
         int n,i,j;
    cin>>n;
    for(i=0;i=1;j--)cout<

 

7-18穷举 换硬币

将一笔零钱换成5分、2分和1分的硬币,要求每种硬币至少有一枚,有几种不同的换法?

输入格式:

输入在一行中给出待换的零钱数额x∈(8,100)。

输出格式:

要求按5分、2分和1分硬币的数量依次从大到小的顺序,输出各种换法。每行输出一种换法,格式为:“fen5:5分硬币数量, fen2:2分硬币数量, fen1:1分硬币数量, total:硬币总数量”。最后一行输出“count = 换法个数”。

输入样例:

13

输出样例:

fen5:2, fen2:1, fen1:1, total:4
fen5:1, fen2:3, fen1:2, total:6
fen5:1, fen2:2, fen1:4, total:7
fen5:1, fen2:1, fen1:6, total:8
count = 4
#include
using namespace std;
int main(){
       int n,i,j,k,x=0;
    cin>>n;
    for(i=n/5;i>=1;i--){
        for(j=n/2;j>=1;j--){
            for(k=n;k>=1;k--){
                if(((i*5+2*j+k)==n))
                   { printf("fen5:%d, fen2:%d, fen1:%d, total:%d\n",i,j,k,i+j+k);x++;}
            }
        }
    } cout<<"count = "<

 7-19 念数字

输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出fu字。十个数字对应的拼音如下:

0: ling
1: yi
2: er
3: san
4: si
5: wu
6: liu
7: qi
8: ba
9: jiu

输入格式:

输入在一行中给出一个整数,如:1234

提示:整数包括负数、零和正数。

输出格式:

在一行中输出这个整数对应的拼音,每个数字的拼音之间用空格分开,行末没有最后的空格。如
yi er san si

输入样例:

-600

输出样例:

fu liu ling ling
#include
using namespace std;
int main(){
       string s,a[10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
    cin>>s;
    for(int i=0;i

 7-20嵌套循环 猜算式?2*7?=3848中的数字

算式:?2*7?=3848中缺少一个十位数和一个个位数。编程求出使该算式成立时的这两个数,并输出正确的算式。

输出格式:

在一行中输出A2*B7=C的值。

输出样例:

52*74=3848
#include
using namespace std;
int main(){
       for(int i=1;i<10;i++){
           for(int j=1;j<10;j++){
               if(((i*10+2)*(70+j))==3848)
                   cout<

7-21 最大公约数和最小公倍数 

本题要求两个给定正整数的最大公约数和最小公倍数。

输入格式:

输入在一行中给出两个正整数M和N(≤1000)。

输出格式:

在一行中顺序输出M和N的最大公约数和最小公倍数,两数字间以1空格分隔。

输入样例:

511 292

输出样例:

73 2044
#include
using namespace std;
int main(){
        int n,m,a,x,y;
    cin>>n>>m;x=n,y=m;
    if(n%m==0)a=n/m;
    while(1){
        a=abs(n-m);
        n=m;
        m=a;
        if(n%m==0)break;
    } 
    cout<

 

 

你可能感兴趣的:(pta,算法,c++)