⑴编写函数fun,功能是:计算s(N)数组中N个数的平均数,平均值通过行参返回主函数,将小于平均值
⑴编写函数fun,功能是:计算s(N)数组中N个数的平均数,平均值通过行参返回主函数,将小于平均值且最接近平均值的数作为函数值返回,在主程序中产生随机数,调用fun后输出...
⑴编写函数fun,功能是:计算s(N)数组中N个数的平均数,平均值通过行参返回主函数,将小于平均值且最接近平均值的数作为函数值返回,在主程序中产生随机数,调用fun后输出平均值和小于平均值且最接近平均值的数。(随机数函数:Call Random_Number(x),产生[0,1)的随机数存入x)
⑵如果一个数的因子之和等于这个数本身,则称这样的数为“完全数”。例如整数28的因子为1,2,4,7,14,其和为1+2+4+7+14=28,因此28是一个完全数。编写一个程序,从键盘上输入整数M、N,求出M和N之间所有的完全数。 展开
⑵如果一个数的因子之和等于这个数本身,则称这样的数为“完全数”。例如整数28的因子为1,2,4,7,14,其和为1+2+4+7+14=28,因此28是一个完全数。编写一个程序,从键盘上输入整数M、N,求出M和N之间所有的完全数。 展开
展开全部
/*
⑴编写函数fun,功能是:计算s(N)数组中N个数的平均数,
平均值通过行参返回主函数,
将小于平均值且最接近平均值的数作为函数值返回,
在主程序中产生随机数,调用fun后输出平均值和小于平均值且最接近平均值的数。
(随机数函数:Call Random_Number(x),产生[0,1)的随机数存入x)
⑵如果一个数的因子之和等于这个数本身,则称这样的数为“完全数”。
例如整数28的因子为1,2,4,7,14,其和为1+2+4+7+14=28,因此28是一个完全数。
编写一个程序,从键盘上输入整数M、N,求出M和N之间所有的完全数。
*/
#include <stdio.h>
#include <stdlib.h>
typedef double LL;
int N = -1;//个数
int M = -1;
LL S[100000] = {0};
LL fun(LL S[],LL &average);
void perfectNumber(int M,int N);
int compare(const void* elem1, const void* elem2)
{
return *(double *)elem1 > *(double *)elem2 ? 1 : -1;
}
void Random_Number(double &x)
{
x = rand()/32767.0;
//printf("x=%lf,",x);//打印随机数
}
int main()
{
LL average;
LL beforeavg;
int cases = 0;
printf("==start==\n\n");
printf("Input 函数fun test cases:");
scanf("%d",&cases);
while(cases-- > 0){
printf("Input N:");
scanf("%d",&N);
int i = 0;
for(i=0;i<N;++i){
Random_Number(S[i]);
}
beforeavg = fun(S,average);
if(beforeavg < 0){
printf("There is no number less then average.");
}else{
printf("beforeavg : %lf\n",beforeavg);
}
printf("average : %lf\n\n",average);
}
printf("Input 完全数 test cases:");
scanf("%d",&cases);
while(cases-- > 0){
printf("Input 整数M、N:");
scanf("%d%d",&M,&N);
perfectNumber(M,N);
}
printf("==end==\n");
return 0;
}
LL fun(LL S[],LL &average)
{
LL all = 0;
for(int i=0;i<N;++i){
all += S[i];
}
average = all/N;
//for(int k =0;k<N;)printf("x=%lf,",S[k++]);//排序前打印随机数
qsort(S,N,sizeof(LL),compare) ;
//printf("\n");
//for(int k1 =0;k1<N;)printf("x=%lf,",S[k1++]);//排序后打印随机数
for(int k=N-1;k>=0;k--){
if(S[k]<average){
return S[k];
}
}
return -1;
}
void perfectNumber(int M,int N)
{
int num,all;
if(M>N){
num = M;
M = N;
N = num;
}
for(num = M;num <= N;++num){
all = 1;
for(int i =2;i<num && i<=num/2; i++){
if(num%i == 0)all += i;
}
if(all == num){
printf("perfectNumber:%d\n",num);
}
}
return;
}
⑴编写函数fun,功能是:计算s(N)数组中N个数的平均数,
平均值通过行参返回主函数,
将小于平均值且最接近平均值的数作为函数值返回,
在主程序中产生随机数,调用fun后输出平均值和小于平均值且最接近平均值的数。
(随机数函数:Call Random_Number(x),产生[0,1)的随机数存入x)
⑵如果一个数的因子之和等于这个数本身,则称这样的数为“完全数”。
例如整数28的因子为1,2,4,7,14,其和为1+2+4+7+14=28,因此28是一个完全数。
编写一个程序,从键盘上输入整数M、N,求出M和N之间所有的完全数。
*/
#include <stdio.h>
#include <stdlib.h>
typedef double LL;
int N = -1;//个数
int M = -1;
LL S[100000] = {0};
LL fun(LL S[],LL &average);
void perfectNumber(int M,int N);
int compare(const void* elem1, const void* elem2)
{
return *(double *)elem1 > *(double *)elem2 ? 1 : -1;
}
void Random_Number(double &x)
{
x = rand()/32767.0;
//printf("x=%lf,",x);//打印随机数
}
int main()
{
LL average;
LL beforeavg;
int cases = 0;
printf("==start==\n\n");
printf("Input 函数fun test cases:");
scanf("%d",&cases);
while(cases-- > 0){
printf("Input N:");
scanf("%d",&N);
int i = 0;
for(i=0;i<N;++i){
Random_Number(S[i]);
}
beforeavg = fun(S,average);
if(beforeavg < 0){
printf("There is no number less then average.");
}else{
printf("beforeavg : %lf\n",beforeavg);
}
printf("average : %lf\n\n",average);
}
printf("Input 完全数 test cases:");
scanf("%d",&cases);
while(cases-- > 0){
printf("Input 整数M、N:");
scanf("%d%d",&M,&N);
perfectNumber(M,N);
}
printf("==end==\n");
return 0;
}
LL fun(LL S[],LL &average)
{
LL all = 0;
for(int i=0;i<N;++i){
all += S[i];
}
average = all/N;
//for(int k =0;k<N;)printf("x=%lf,",S[k++]);//排序前打印随机数
qsort(S,N,sizeof(LL),compare) ;
//printf("\n");
//for(int k1 =0;k1<N;)printf("x=%lf,",S[k1++]);//排序后打印随机数
for(int k=N-1;k>=0;k--){
if(S[k]<average){
return S[k];
}
}
return -1;
}
void perfectNumber(int M,int N)
{
int num,all;
if(M>N){
num = M;
M = N;
N = num;
}
for(num = M;num <= N;++num){
all = 1;
for(int i =2;i<num && i<=num/2; i++){
if(num%i == 0)all += i;
}
if(all == num){
printf("perfectNumber:%d\n",num);
}
}
return;
}
追问
两个题的答案吗…分不清楚啊……不好意思…
追答
第一题:LL fun(LL S[],LL &average)
第二题:void perfectNumber(int M,int N)
用户体验也很重要,我就写了几次循环,把注释的行去掉注释去掉注释号,你能直观的看到随机数的生成和排序。
以上
展开全部
//1题
#include <iostream>
using namespace std;
void Random_Number(double &x);
double fun(double p[], int n, double &avg)
{
if (n <= 0)
return 0;
int i;
double num = 0;
for (i = 0; i < n; i++)
num += p[i];
avg = num / n;
double r = avg;
for (i = 0; i < n; i++)
{
if (p[i] >= avg)
continue;
if (r >= avg || r <= p[i])
r = avg;
}
return r;
}
int const N = 100;
int main()
{
double arr[N];
for (int i = 0; i < N; i++)
Random_Number(a[i]);
double avg, r;
r = fun(arr, N, avg);
cout<<avg<<endl;
cout<<r<<endl;
return 0;
}
//2题
#include <iostream>
using namespace std;
int sum_yinzi(int n)
{
int sum = 0;
int a = n;
int i = 1;
do
{
if (n % i == 0)
{
a = n / i;
sum += (i + ((i < a && a < n) ? a : 0));
}
i++;
} while (i < a);
return sum;
}
bool is_wanquanshu(int n)
{
if (n < 1)
return false;
return sum_yinzi(n) == n;
}
int main()
{
int M, N;
cout<<"请输入M、N:"<<endl;
cin>>M;
cin>>N;
cout<<M<<"和"<<N<<"之间的完全数有:"<<endl;
for (int i = M; i <= N; i++)
{
if (is_wanquanshu(i))
cout<<i<<" ";
}
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询