我是靠谱客的博主 贤惠口红,最近开发中收集的这篇文章主要介绍6.1-课堂练习,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.求正整数2和100之间的完全数。
完全数:因子之和等于它本身的自然数,如6=1+2+3

#include<iostream>
using namespace std;
int judge(int x);
int main()
{
int i;
for(i=2; i<=100; i++)
if(judge(i)==i)//judge(i)为i的因子之和,judge(i)若与i相等,满足条件
cout<<i<<endl;
return 0;
}
int judge(int x)
{
int i;
int sum=0;
for(i=1; i<=x-1; i++) //枚举1到x中,判断是否为x的因子
if(x%i==0)//若是x的因子,累加
sum+=i;
return sum;//因为和等于本身 
}

2.编程求2~n(n为大于2的正整数)中有多少个素数。

#include<iostream>
#include<cmath>
using namespace std;
bool judge(int x);
int main()
{
int n;
int i;
int sum=0;
cin>>n;
for(i=2; i<=n; i++)
if(judge(i))//若是素数
sum++;//累加素数个数
cout<<sum<<endl;
return 0;
}
bool judge(int x)//判断素数
{
int i=2;
while(i<=floor(sqrt(x))&&(x%i)!=0)
i++;//能被整除则跳出循环 
if(i>floor(sqrt(x)))
return true;//除了1和本身不能被整除 
return false;
}

3.已知 m=max(a,b,c)/max(a+b,b,c)×max(a,b,b+c) ,输入a,b,c,求m。把求三个数的最大数max(x,y,z)分别定义成函数和过程来做。

#include<iostream>
#include<cstdio>
using namespace std;
int max(int a,int b,int c);
int main()
{
int a,b,c;
double m;
cin>>a>>b>>c;//输入a、b、c
m=1.0*max(a,b,c)/(max(a+b,b,c)*max(a,b,b+c));//计算m
printf("%.3lfn",m);
return 0;
}
int max(int a,int b,int c)//求三个数中的最大值
{
int temp=a;
if(a<b)
temp=b;
if(temp<c)
temp=c;
return temp;
}

4.如果一个自然数是素数,且它的数字位置经过对换后仍为素数,则称为绝对素数,例如13。试求出所有二位绝对素数。

#include<iostream>
#include<cmath>
using namespace std;
bool judge(int x);
int main()
{
int i;
for(i=10; i<=99; i++) //从10枚举到99
if( judge(i) && judge((i%10)*10+(i/10)) )//分别判断i以及i变换后是否是素数
cout<<i<<endl;
return 0;
}
bool judge(int x)//判断素数 
{
int i=2;
while( i<=floor(sqrt(x)) && (x%i!=0) )
i++;
if(i>floor(sqrt(x)))
return true;
return false;
}

5.自然数a的因子是指能被a整除的所有自然数,但不含a本身。例如12的因子为:1,2,3,4,6。若自然数a的因子之和为b,而且b的因子之和又等于a,则称a,b为一对“亲和数” 。求最小的一对亲和数(a<>b)。

#include<iostream>
using namespace std;
int judge(int n);
int main()
{
long int i;
for(i=1;; i++) //从1开始枚举
{
if( i==judge(judge(i)) && i!=judge(i) )//num(num(i))即为i因子之和的因子之和
{
cout<<i<<" "<<judge(i)<<endl;//i与judge(i)即满足条件的一组亲和数
break;//退出
}
}
return 0;
}
int judge(int n) //因子之和 
{
long int sum=0;
long int i;
for(i=1; i<n/2+1; i++) //因子不含0和本身,最大是n/2 
if(n%i==0) //能整除 
sum+=i;//因子之和 
return sum;
}

6.如果一个数从左边读和从右边读都是同一个数,就称为回文数。例如6886就是一个回文数,求出所有的既是回文数又是素数的三位数。

#include<iostream>
#include<cmath>
using namespace std;
bool judge(int x);
int main()
{
int i;
for(i=100; i<=999; i++) //从100枚举所有三位数
if( judge(i) && (i/100==i%10))//该数是素数且百位与个位相同
cout<<i<<endl;//输出该数
return 0;
}
bool judge(int x)//判断素数:除了1和本身不能被整除 
{
int i=2;
while( i<=floor(sqrt(x)) && (x%i!=0) )
i++;
if(i>floor(sqrt(x)))
return true;
return false;
}

7.根据公式arctanx(x)=x−x3/3+x5/5−x7/7+…和π=6arctanx(1/√3).定义函数arctanx(x),定义函数arctanx(x),求当最后一项小于10(−6)时π的值。

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
double calculate(double x);
int main()
{
double a,pi;
a=1/sqrt(3);//计算公式的参数
pi=6*(calculate(a));//调用函数计算
printf("%.10lfn",pi);//保留十位小数输出
return 0;
}
double calculate(double x)
{
double sum=0,temp=x;
int i=1;
while(fabs(temp/i)>=1e-6)//最后一项绝对值大于10^(-6)(1e-6)时进行循环
{
sum+=temp/i;//累加各项
temp=-1*x*x*temp;//求下一项
i+=2;//系数+2
}
return sum;
}

8.哥德巴赫猜想的命题之一是:大于6 的偶数等于两个素数之和。编程将6~100所有偶数表示成两个素数之和。

#include<iostream>
#include<cmath>
using namespace std;
bool judge(int x);
int main()
{
int x;
int i;
for(x=6; x<=100; x+=2) //枚举6-100的偶数
for(i=2; i<=x/2; i++) //将x分解为i与x-i两个数
if(judge(i)&&judge(x-i))//若被分解的两个数皆为素数
{
cout<<x<<"="<<i<<"+"<<x-i<<endl;//输出
break;//终止循环
}
return 0;
}
bool judge(int x)//判断素数
{
int i=2;
while( i<=floor(sqrt(x)) && (x%i!=0) )
i++;
if(i>floor(sqrt(x)))
return true;
return false;
}

最后

以上就是贤惠口红为你收集整理的6.1-课堂练习的全部内容,希望文章能够帮你解决6.1-课堂练习所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部