照常刷题
问题描述
有一天,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;
}
要点 :判断分割区间