2022.02.15

照常刷题

问题描述

  有一天,JOE终于不能忍受计算a^b%c这种平凡的运算了。所以他决定要求你写一个程序,计算a^b%c。

  提示:若b为奇数,,a^b=(a^(b/2))^2*a,否则a^b=(a^(b/2))^2。

输入格式

  三个非负整数a,b,c;

输出格式

  一个整数ans,表示a^b%c;

样例输入

7 2 5

样例输出

4

数据规模和约定

  30% a <= 100, b <= 10^4, 1 <= c <= 100
  60% a <=10^4, b <= 10^5, 1 <= c <= 10^4
  100% a <=10^6, b <= 10^9, 1 <= c <= 10^6

这题涉及到快速幂,为了减少计算量,需要不断对底数进行取模;同时还要判断指数的奇偶性

#include<bits/stdc++.h>
using namespace std;

int main()
{
    long long a,b,c;
    cin>>a>>b>>c;
    long long sum=1;
    while(b)
    {
        if(b%2==0)
            a=(a*a)%c;
        else if(b%2!=0)
        {
            sum=(a*sum)%c;
            a=(a*a)%c;
        }
        b=b/2;
    }
    cout<<sum%c;
    return 0;
}

 错误总结:第一次想写函数,事实证明,有事没事别写递归,不然电脑会烧的

                   第二次数爆了,事实证明能够long long干嘛int

问题描述

  输入任意10个浮点数,根据它们的聚集程度划分为3组,输出每一组的平均值。
  提供老师上课讲的一种思路:将10个数字进行在数轴上排序,然后计算每两个点间的距离,在所有的距离中选取两个最大距离处断开,这样就把10个数字分为了3组。
  本题难度较大,如果深入讨论会比较复杂,大家可以只考虑如下面样例所示的分组情况非常简单的情况,只要简单情况能够成功计算,本题就能得分。

  另外,本题内容有些超前,推荐大家自学一下数组那一章中第一节一维数组,然后使用一维数组来做。排序算法可以参考trustie平台上传的冒泡排序法参考资料。

输入格式

  十个待输入的浮点数,使用空格隔开

输出格式

  三组数的平均数,每输出一个需要换行

样例输入

一个满足题目要求的输入范例。
例1:
50.4 51.3 52.3 9.5 10.4 11.6 19.1 20.8 21.9 49.6

例2:
8.6 7.4 3.5 17.9 19.1 18.5 37.6 40.4 38.5 40.0

样例输出

与上面的样例输入对应的输出。
例1:
10.5
20.6
50.9

例2:
6.5
18.5
39.125

基操

#include<bits/stdc++.h>
using namespace std;

int main()
{
    double a[10];
    int i;
    for(i=0;i<10;i++)
        cin>>a[i];
    sort(a,a+10);
    double b[10],max1=0,max2=0,sum=0;
    for(i=0;i<9;i++)
        b[i]=fabs(a[i]-a[i+1]);
    int x1,x2,temp;
    x1=x2=0;
    for(i=0;i<9;i++)
    {
        if(max2<b[i]&&max1>b[i])
        {
            max2=b[i];
            x2=i;
        }
        if(max1<b[i])
        {
            max2=max1;
            x2=x1;
            max1=b[i];
            x1=i;
        }
    }
    if(x1>x2)
    {
        temp=x1;
        x1=x2;
        x2=temp;
    }              //x2>x1

    for(i=0;i<=x1;i++)
        sum+=a[i];
    cout<<sum/(x1+1)<<endl;
    sum=0;
    for(i=x1+1;i<=x2;i++)
        sum+=a[i];
    cout<<sum/(x2-x1)<<endl;
    sum=0;
    for(i=x2+1;i<10;i++)
        sum+=a[i];
        cout<<sum/(9-x2);
    return 0;
}

要点 :判断分割区间

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值