| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1225 人关注过本帖, 1 人收藏
标题:怎么做 一直都是错 老师总是说一半 郁闷
只看楼主 加入收藏
comewest
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:74
专家分:335
注 册:2014-12-3
收藏
得分:0 
//加上了去掉重复项的功能之后。。。
#include <stdio.h>
#include <stdlib.h>
int sum(int n) {
    int i, s = 0;

    for(i = 1; i <= (n / 2); i++) {
        if(0 == n % i) {
            s += i;
        }
    }
    return s;
}

int sum(int n);
int main(void)
{
    int  i, j,ri,rei;
    for(i = 2 ; i < 9999; i++)
        { ri=sum(i);
          rei=sum(ri);
          if(i==rei&& i!=ri)
          {
              printf("{%d,%d是相亲数}\n",i,ri);
              i=ri;//去掉重复项
          }
        }  
    return 0 ;
}

[ 本帖最后由 comewest 于 2014-12-11 23:23 编辑 ]
2014-12-10 10:51
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
10楼版主的代码果然明显比我的快了

就是看得好辛苦

Only the Code Tells the Truth             K.I.S.S
2014-12-10 11:20
吴健飞飞
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2014-12-9
收藏
得分:0 
等我回去运行看看  对不对
2014-12-11 16:32
吴健飞飞
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2014-12-9
收藏
得分:0 
这是 我做的另外营道题  不知道对不对 看看就好
计算个人所得税
     现在执行的个人所得税是按9级超额累进税率进行计算。根据新的个人所得税计算规则,起征点提高到c=2000元。收入扣除2000元后:
不超过500元的部分,征收5%;
超500~2000元部分,征收10%;
超2000~5000元部分,征收15%;
超5000~20000元部分,征收20%;
超20000~40000元部分,征收25%;
超40000~60000元部分,征收30%;
超60000~80000元部分,征收35%;
超80000~100000元部分,征收40%;
超100000元以上的,征收45%。
#include <stdio.h>
#include <math.h>
int isprime(long n) //判断n是否为素数
{
int i,f=1,k=abs(n);
for(i=2;f==1 && i<=k;i++)
f=n%i;
return f;
}

int main(){
int i;
for(i=100; i<200; i++){
if(isprime(i) && isprime(i+2))
printf("%d, %d\n",i,i+2);
}

return 0;
}
#include <stdio.h>

int properfactor_sum(int n){
int r=1,i;
for(i=2; i<n; i++)
if(n%i==0)
r+=i;
return r;
}

int main(){
int i,n,m;
for(i=1000; i<=9999; i++){
n=properfactor_sum(i);
m=properfactor_sum(n);
if(m==i && i<n)
printf("%d, %d\n",i,n);
}
return 0;
}
#include <stdio.h>
/* 计算个人所得税 */
int main(){
float sr,se,d1,d2,d3,d4,d5,d6,d7,d8,d9;
d1=500*0.05;
d2=d1+1500*0.1;
d3=d2+3000*0.15;
d4=d3+15000*0.20;
d5=d4+20000*0.25;
d6=d5+20000*0.30;
d7=d6+20000*0.35;
d8=d7+20000*0.40;

scanf("%f",&sr);
sr-=2000;  /* 超过2000部分,即应纳税部分 */
if(sr<=0)  /* 没有超过2000,不纳税 */
se=0;
else if(sr<500)  /* 超过部分<500 */
se=0.05*sr;
else if(sr<2000)  /* 超过部分500~2000 */
se=d1+0.1*(sr-500);
else if(sr<5000)  /* 超过部分2000~5000 */
se=d2+0.15*(sr-2000);
else if(sr<20000) /* 超过部分5000~20000 */
se=d3+0.20*(sr-5000);
else if(sr<40000) /* 超过部分20000~40000 */
se=d4+0.25*(sr-20000);
else if(sr<60000) /* 超过部分40000~60000 */
se=d5+0.30*(sr-40000);
else if(sr<80000)  /* 超过部分60000~80000 */
se=d6+0.35*(sr-60000);
else if(sr<100000)  /* 超过部分80000~100000 */
se=d7+0.40*(sr-80000);
else  /* 超过部分>=100000 */
se=d8+0.45*(sr-100000);
printf("%.2f, %.2f\n",sr+2000,se);
return 0;
}
2014-12-11 16:35
巧若拙
Rank: 4
来 自:宁波余姚
等 级:业余侠客
威 望:1
帖 子:159
专家分:273
注 册:2014-8-24
收藏
得分:1 
写了一个很直接的算法,用我的破电脑,速度和10楼的差不多

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>

int main(void)
{
    unsigned n = 100000;
    unsigned i, j, sa, sb;
   
    clock_t begin, end;
    double  cost;
    begin = clock();
   
//    printf("请输入一个正整数N,以查找相亲数对,数对中的每个数值均不大于N:");
//    scanf("%d", &n);
   
    for (i=2; i<=n; i++)
    {
        sa = 1;
        for (j=sqrt(i); j>1; j--)//计算i的真因数和
        {
            if (i % j == 0)
                sa += j + i / j;
        }
        if (sa <= i)//确sa>i,以避免重复计算
            continue;
        sb = 1;
        for (j=sqrt(sa); j>1 && sb<=i; j--)//计算sa的真因数和
        {
            if (sa % j == 0)
                sb += j + sa / j;
        }
        if (sb == i)
            printf( "%u\t%u\n", i, sa);
    }
   
    end = clock();
    cost = (double)(end - begin) / CLOCKS_PER_SEC;
    printf("%lf seconds\n", cost);
   
    return 0;
}

[ 本帖最后由 巧若拙 于 2014-12-11 21:23 编辑 ]
2014-12-11 21:17
巧若拙
Rank: 4
来 自:宁波余姚
等 级:业余侠客
威 望:1
帖 子:159
专家分:273
注 册:2014-8-24
收藏
得分:0 
11楼的程序有问题
2014-12-11 21:36
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
回复 15楼 巧若拙
学习了 都是高手

Only the Code Tells the Truth             K.I.S.S
2014-12-11 21:42
巧若拙
Rank: 4
来 自:宁波余姚
等 级:业余侠客
威 望:1
帖 子:159
专家分:273
注 册:2014-8-24
收藏
得分:0 
有人反映10楼的算法看不懂,我简单解释一下,其实10楼是用一个数组p[i],记录了整数i的真因数之和,然后遍历1...n,判断p[p[i]] 和 i是否相等,若相等,则表示i和 p[i]是相亲数对。我把10楼的代码简单修改一下,并做了注释,希望你能看明白。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
   
int main(void)
{
    unsigned n = 100000;
    unsigned i, j;
    unsigned p[100001] = {0};

    clock_t begin, end;
    double  cost;
    begin = clock();
   
//    printf("请输入一个正整数N,以查找相亲数对,数对中的每个数值均不大于N:");
//    scanf("%d", &n);
   
    for (i=2; i<=n; i++)
    {
        p[i] = 1;
        for (j=sqrt(i); j>1; j--)//计算i的真因数和,并存储在p[i]中
        {
            if (i % j == 0)
                p[i] += j + i / j;
            if (p[i] > n)
            {
                p[i] = 0;
                break;
            }
        }
    }
   
    for (i=2; i<=n; i++)
    {
        if (p[p[i]] == i && i < p[i]) //相亲数对
            printf( "%u\t%u\n", i, p[i]);
    }
   
    end = clock();
    cost = (double)(end - begin) / CLOCKS_PER_SEC;
    printf("%lf seconds\n", cost);
   
    return 0;
}
2014-12-11 22:19
comewest
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:74
专家分:335
注 册:2014-12-3
收藏
得分:0 
回复 16楼 巧若拙
去掉重复项的语句加错位置了,已改正。。。
2014-12-11 23:23
comewest
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:74
专家分:335
注 册:2014-12-3
收藏
得分:0 
回复 14楼 吴健飞飞
为何不用switch
2014-12-11 23:24
快速回复:怎么做 一直都是错 老师总是说一半 郁闷
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.051140 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved