假期刷题打卡--Day23

1、MT1190分数乘法

输入5组分数,对他们进行乘法运算,输出结果。不考虑分母为0等特殊情况。

格式

输入格式:

输入整型,每组一行,如样例所示。

输出格式:

输出计算结果实型,如样例所示。

样例 1

输入:

1/2 1/4  
2/3 1/7  
3/5 2/7
3/13 2/5
1/9 11/15

输出:

0.125000  
0.095238  
0.171429  
0.092308  
0.081481
分析过程

刚看到这个题目的时候,下意识反应,输入五组,然后分别输入。后面才意识到这个可以使用循环结构解决,所以,就写出了下面代码。

实现代码
#include 

using namespace std;

int main( )
{
    double a1,a2,b1,b2;
    for(int i=0;i<5;i++){
        scanf("%lf/%lf %lf/%lf",&a1,&b1,&a2,&b2);
        printf("%lf\n",(a1*a2)/(b1*b2));
    }
    return 0;
}

2、MT1191减半

输入两个值N和M,输出N做M次减半后的值。比如100,减半后依次为50, 25, 12…,减半3次后是12。输入不考虑0,负数或者其他特殊情况。

格式

输入格式:

输入为整型,空格分隔

输出格式:

输出为整型

样例 1

输入:

100 3

输出:

12
注意点

        这道题没有什么难度,但是有一点需要注意,要求输入数为整数,所以在减半的时候不能使用1/2这种形式,因为这样计算的话,会直接化成整型,计算结果为0,无法得到想要的结果,而是用0.5就可以得出正确结果。

实现代码
#include 

using namespace std;

int main( )
{
    int n,count;
    cin >> n >> count;        
    for(int i=0;i

3、MT1193偶数的平方和

输入正整数N,求前N个偶数的平方和。不考虑溢出。

格式

输入格式:

输入正整数N

输出格式:

输入整型

样例 1

输入:

3

输出:

56
备注

本题第一个偶数从2起算

分析过程

本题要求前n个偶数的平方和。此题要求偶数从2开始,那么样例一输入的n为3,所以3个偶数为2,4,6,所以循环的次数为3,循环当中的偶数应该如何依次增大呢?是需要前一个偶数加2,或者说,可以从i=1开始,i乘以2也是可以实现的。

实现代码

首先尝试使用加法实现,实现代码如下:

#include 

using namespace std;

int main( )
{
    int n,sum=0;
    cin >> n;
    int m = 2;
    for(int i=1;i<=n;i++){      
        sum += pow(m,2);
        m = 2 + i*2;
    }
    cout << sum;
    return 0;
}

然后使用乘法解决,实现代码如下:

#include 

using namespace std;

int main( )
{
    int n,sum=0;
    cin >> n;
    for(int i=1;i<=n;i++){
        int m = i*2;
        sum += pow(m,2);
    }
    cout << sum;
    return 0;
}

上述两种方法的不同之处在于,是否在循环前就定义第一个偶数为2。

4、MT1194奇数的平方和

输入正整数N,求前N个奇数的平方和。不考虑溢出。

格式

输入格式:

输入正整数N

输出格式:

输入整型

样例 1

输入:

3

输出:

35
实现代码
#include 

using namespace std;

int main( )
{
    int n,m=1,sum=0;
    cin >> n;
    for(int i=1;i<=n;i++){
        sum += pow(m,2);
        m = 1 + i*2;
    }
    cout << sum;
    return 0;
}

上面两个题计算奇偶数的区别仅仅在于初值,奇数初值为1,偶数初值为2。

5、MT1195公式求和

输入正整数N和M,按照下列公式求和。

格式

输入格式:

输入整型,空格分隔

输出格式:

输出实型

样例 1

输入:

2 4

输出:

0.42361
分析过程

刚开始的时候没有理解本题的终结条件(可能是数学能力的缺失),后来发现m是最后的一个值,所以要求的应该是小于m,按照上面的理解,写出以下代码:

实现代码
#include 

using namespace std;

int main( )
{
    int n,m;
    double sum=0;
    scanf("%d %d",&n,&m);
    while(n<=m){
        sum += 1.0/(pow(n,2));
        n++;
    }
    printf("%.5f",sum);
    return 0;
}

6、MT1196阶乘

请编写一个简单程序,输入正整数n,输出n的阶乘。

格式

输入格式:

输入整型

输出格式:

输出整型

样例 1

输入:

5

输出:

5!=120
实现代码
#include 

using namespace std;
/*解决思路:
注意这里要实现阶乘就需要设置sum初值为1,
然后i从1开始依次相乘到输入数*/
int main( )
{
    int n,sum=1;
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        sum = sum*i;
    }
    printf("%d!=%d",n,sum);
    return 0;
}

7、MT1197阶乘和

求1!+2!+3!+…+n!

格式

输入格式:

输入为整型

输出格式:

输出为整型

样例 1

输入:

5

输出:

153
分析过程

本题需要解决的有两点:

  1. 计算从1到输入数n的阶乘
  2. 将这些阶乘相加

按照上面的两点我们可以得知,计算阶乘这个部分需要计算多次,所以可以写成一个函数,调用输入数n次,然后设置一个sum=0,来计算总数。

按照上述思路,得到如下代码:

实现代码
#include 

using namespace std;

int s(int a){
    int sum1=1;
    for(int i=1;i<=a;i++){
            sum1*=i;
    } 
    // cout << sum1 << "**";
    return sum1;   
}
int main( )
{
    int n,sum=0;
    cin >> n;
    for(int i=1;i<=n;i++){
            sum+=s(i);
    }
    cout << sum;
    return 0;
}

 

明天继续吧。

你可能感兴趣的:(假期打卡学习,算法,c++,开发语言)