第一题
我的想法就是遍历1到n,判断每个数属于哪一类,然后加到那一类上。 题目保证每类数至少有一个,所以肯定不会出现除0导致re的问题
其他的东西看代码就差不多了
#include<cstdio>
int main(){
int n,k;
scanf("%d%d",&n,&k);
double sum1=0,sum2=0,num1=0,num2=0;
for(int i=1;i<=n;i++){
if(i%k==0)sum1+=i,num1++;
else sum2+=i,num2++;
}
printf("%.1lf %.1lf\n",sum1/num1,sum2/num2);
return 0;
}
第二题
首先int的范围最大是2^31-1 所以题目给的n是int范围内的
n是由两个不同质数的乘积构成,要求大的质数
n本身是合数,质数是从2开始的 所以枚举的范围是2-n-1(闭区间)
因为n只有质数因子(除了1和n) 所以枚举的i如果是n的因子必然是质数 n/i就是较大的质数因子了
枚举到了因子就直接break跳出循环,节约一点时间开销
质数的开篇题
#include<cstdio>
#include<cstring>
int main(){
int n;
scanf("%d",&n);
for(int i=2;i<n;i++){
if(n%i==0){printf("%d\n",n/i);break;}
}
return 0;
}
第三题
先上代码
#include<cstdio>
#include<cstring>
int if_prime(int x){
if(x==1)return 0;
if(x==2)return 1;
if(x==3)return 1;
for(int i=2;i*i<=x;i++){
if(x%i==0)return 0;
}
return 1;
}
int main(){
int n;
scanf("%d",&n);
int ans=0,sum=0;
for(int i=2;i<=n;i++){
if(if_prime(i)&&sum+i<=n){
sum+=i;
ans++;
printf("%d\n",i);
}
}
printf("%d\n",ans);
return 0;
}
最开始的if_prime函数是用来判断x的质数性的,可以写的更美观一点(同学们自行改改吧,如果有强迫症的话)
显然ans是质数个数,而sum是目前的质数和 其他的东西在代码里应该比较好理解
第四题
回文质数 有点烦 我没看题目下面的提示,我的思路就是打个质数表,然后看是不是回文的
#include<cstdio>
#define MAXN 10000005
int prime[MAXN];
bool pp[MAXN];
void get_prime(){
for(int i=1;i<MAXN;i++){
pp[i]=true;
}
pp[1]=false;
for(int i=2;i*i<=MAXN;i++){
if(pp[i]){
for(int j=i*i;j<MAXN;j+=i)pp[j]=false;
}
}
}
bool if_h(int x)
{
int y=x,num=0;
while (y!=0)
{
num=num*10+y%10;
y/=10;
}
if (num==x) return 1;
else return 0;
}
int main()
{
int a,b;
scanf("%d%d",&a,&b);
get_prime();
for(int i=a;i<=b;i++)
{
if(i>10000000)
break;
if(if_h(i)&&pp[i]) printf("%d\n",i);
}
return 0;
}
第五题
一个普普通通的打图像题 要领也就一个,找规律
#include<cstdio>
#include<cstring>
int main(){
int n;scanf("%d",&n);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
int k=j+(i-1)*n;
printf("%02d",k);
}
printf("\n");
}
printf("\n");
int cnt=1;
for(int i=1;i<=n;i++){
for(int j=2*(n-i);j>=1;j--){
printf(" ");
}
for(int j=1;j<=i;j++){
printf("%02d",cnt++);
}
printf("\n");
}
return 0;
}
总而言之,求质数的常见问题也就写个函数判断或者打表了,看之后的具体题目具体分析那种方法 函数适合那种数据小 问题只问几个数是不是质数,那就没必要打表了 打表就是那种上十万的题目,用函数一个一个判断很容易超时
|