求解C语言编程题。。。

 我来答
Troy_Ricardo
2018-03-09
知道答主
回答量:18
采纳率:58%
帮助的人:8.3万
展开全部

您好。我默认您程序限制时间为1s。您应该是初学者吧……不知道您数学水平如何,我就按照初/高的水平说了。

第一题:

首先要说的是题面描述有误,是所有真因子的和吧……

您可以先枚举一个数字j,我们知道如果j是数字i的因子的话,i一定是j的倍数,所以我们可以再枚举一个倍数关系k,2<=k<=10000/j,这样我们给每个i=j*k加上j的贡献,这个可以开一个数组存下来。最后再从1到10000跑一遍即可。

至于时间复杂度,您如果学过调和级数就会算出来其时间复杂度为O(n*ln(n))。

当然您要是觉得这个时间复杂度还是不够优秀,也是可以O(n)的。

代码:

#include "stdio.h"
using namespace std;
const int N=1e4+10;
int ans[N];
int main(){
    for (int j=1;j<=10000;++j)
        for (int k=2;k<=10000/j;++k)
            ans[k*j]+=j;
    for (int i=1;i<=10000;++i)
        if(ans[i]==i)   printf("%d%c",i,i==10000?'\n':' ');
}
/*输出:6 28 496 8128*/

第二个题:

……这个我就直接贴代码吧……

#include "stdio.h"
using namespace std;
double a[10];
int main(){
    for (int i=1;i<=8;++i)
        scanf("%f",a+i);
    for (int i=1;i<=8;++i)
        for (int j=i+1;j<=8;++j)
            if(a[i]>a[j]) {
                double t=a[i];
                a[i]=a[j],a[j]=t;
            }
    for (int i=1;i<=8;++i)
    printf("%.8f%c",a[i],i==8?'\n':' ');
}
/*输出:6 28 496 8128*/
追问
谢谢您
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式