《c++程序设计》课程设计报告

一.(problem R(1018))题意:站在楼梯第一级,每次只能走一级或两级,共走M级,共有几种方法。解题思路:现设一个数组,并将数组归零。然后将前40个数储存起来,每一个数都等于它本身前面两个数的加和,依次相加,直到第四十个数。然后根据输入的M(1<=M<=40),输出相应的第M个数。解题细节:第一个数跟第二个数(第一级楼梯跟第二级楼梯)都是1,要仔细找出...
摘要由CSDN通过智能技术生成

一.(problem R(1018)

题意:

站在楼梯第一级,每次只能走一级或两级,共走M级,共有几种方法。

解题思路:

现设一个数组,并将数组归零。然后将前40个数储存起来,每一个数都等于它本身前面两个数的加和,依次相加,直到第四十个数。然后根据输入的M1<=M<=40),输出相应的第M个数。

解题细节:

第一个数跟第二个数(第一级楼梯跟第二级楼梯)都是1,要仔细找出每级楼梯之间的规律才能准确解题。

源码:

#include<stdio.h>

int main()

{

       int N=0,M=0,i=0,sum=0,a[41]={0};

       scanf("%d",&N);

       a[1]=1;

       a[2]=1;

       for(i=3;i<=40;i++)

              a[i]=a[i-1]+a[i-2];

       while(N--)

       {

              scanf("%d",&M);

              printf("%d\n",a[M]);

       }

       return 1;

}

 

二.(problem Q1017)

题意:

判断两个数是否是亲和数。

解题思路:

先用循环语句把两个数各自的真约数找出来并求和,在找真约数的过程中为了防止超时,可以对给定的数进行除以2再加1的运算后,对得到的新数进行运算。再用条件语句判断求和所得的数是否等于另外一个数。

解题细节:

注意循环语句不能超时,同时要注意排除1和其本身。

源码:

#include <iostream>

 

using namespace std;

 

int main()

{

    int n;

    int a,b;

    int i,j,sum;

    bool flag;

    cin>>n;

    for(i=0;i<n;i++){

        cin>>a>>b;

        flag=true;

 

        for(sum=0,j=1;j<b/2+1;j++){

            if(b%j==0)sum+=j;

        }

        if(sum!=a)flag=false;

        for(sum=0,j=1;j<a/2+1;j++){

            if(a%j==0)sum+=j;

        }

        if(sum!=b)flag=false;

 

        if(flag)cout<<"YES"<<endl;

        else cout<<"NO"<<endl;

    }

    return 0;

}

三.(problem P1016))

题意:

求AB次方的末尾的三位数。

解题思路:

用循环语句是A从一次方开始计算,一直乘到AB次方,在每一次循环后取所得结果的末尾的三位数来进行下一次循环,最后输出最后一次循环所得的结果。

解题细节:

为了防止得到的结果数据超出开始所定义的数据范围,可以只对数据的末尾三位数进行运算。

源码:

#include <iostream>

 

using namespace std;

 

int main()

{

    int n;

    int a,b;

    int i,j,sum;

    bool flag;

    cin>>n;

    for(i=0;i<n;i++){

        cin>>a>>b;

        flag=true;

 

        for(sum=0,j=1;j<b/2+1;j++){

            if(b%j==0)sum+=j;

        }

        if(sum!=a)flag=false;

        for(sum=0,j=1;j<a/2+1;j++){

            if(a%j==0)sum+=j;

        }

        if(sum!=b)flag=false;

 

        if(flag)cout<<"YES"<<endl;

        else cout<<"NO"<<endl;

    }

    return 0;

}

四.(problem O1015))

题意:

对两个集合做减法运算,求两个集合的差。

解题思路:

两个集合的差,就是找出集合A中集合B没有的元素。先将两个集合分别输入两个数组中储存起来,然后用循环语句挑出集合A中有但集合B中没有的元素,把这些挑出的元素用一个归零的数组储存,最后判断新数组里的元素是否跟集合A中的元素相同,要是相同,输出“NULL”,要是不同,再用循环语句对新数组进行排序,然后挨个输出。

解题细节:

在每次输入输出一组数据后要把数组重新清零后,再输入另外一组数据。

源码:

#include<cstring>

#include<iostream>

using namespace std;

int main()

{

       int n,m,i,j,k,count,min;

       int a[100],b[100],c[100]={0},d[100];

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值