⑴编写函数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之间所有的完全数。
展开
 我来答
Im_hear
推荐于2017-12-16 · 超过11用户采纳过TA的回答
知道答主
回答量:42
采纳率:0%
帮助的人:28.7万
展开全部
/*
⑴编写函数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)
用户体验也很重要,我就写了几次循环,把注释的行去掉注释去掉注释号,你能直观的看到随机数的生成和排序。
以上
func7
2014-06-29 · 超过23用户采纳过TA的回答
知道答主
回答量:48
采纳率:0%
帮助的人:42.3万
展开全部
//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;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式