实验五:优秀代码

2016-11-17  本文已影响0人  jzh123s

A : 公约数与公倍数

题目描述:
输入两个正整数m和n,求其最大公约数和最小公倍数。

优秀代码

author: 
2016150111
result: 正确
codes:
#include<stdio.h>
int main()
{
    int m,n,a,b,c;
    scanf("%d%d",&m,&n);
    m>=n?(a=m,b=n):(a=n,b=m);
    do
    {
        c=a%b;
        a=b;
        b=c;
    }while(c!=0);
    printf("%d %d",a,(m*n/a));
    return 0;
}

点评 : 考虑了m大于n的情况,缩进到位。

B : 求1!+2!+3!+....+n! 之值

题目描述
求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一个数字。 

优秀代码

author: 
2016150127
result: 正确
codes:
#include<stdio.h>
int main()
{
    int n,i,sum=0,index=1;
    scanf("%d",&n);
    
    for (i=1;i<=n;i++)
    {
        index=index*i;
        sum+=index; 
    }
    printf("%d",sum);
    return 0;
    //5->153;2->3
}

点评 : 一个循环就完成了计算,缩进也到位,该题比较 。

C : 求N以内的完数

题目描述
一个数如果恰好等于它的因子之和,这个数就称为"完数"。 例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。 编程序找出N之内的所有完数,并按下面格式输出其因子:

优秀代码

// 由于这道题大家实在写的不够简练。我自己写了一份,顺便给大家参考下格式
#include <stdio.h>

int main () {
    int num, i, j; // 注意逗号后面有个空格
    scanf("%d", &num); 
    for (i=2; i<n; i++) { // 此处的前花括号是否换行皆可
        int sum = 0;
        for (j=1; j<=i/2; j++) // 计算到i/2
            if (i % j == 0) sum += j;
        if (sum == i) {
            printf("%d its factors are ", i);
            for(j=1; j<=i/2; j++) // 再次计算因子然后输出
                if (i % j == 0) printf("%d ", j);
            putchar('\n');
        }
    }
    return 0;
}
}

点评 : 代码缩进很到位,

D : 序列求和

题目描述
有一分数序列: 2/1 3/2 5/3 8/5 13/8 21/13...... 求出这个数列的前N项之和,保留两位小数。

优秀代码

#include<stdio.h>

int main(){
    int n;
    scanf("%d",&n);
    double up=2,down=1,sum=0,t;
    for(int i=0;i<n;i++) {
        sum+=up/down;
        t=up;
        up=up+down;
        down=t;
    }
    printf("%.2lf\n",sum);
    return 0;
}

点评 : 做过的题,不做评价,关键缩进到位。

E : 输出m到n之间的水仙花数

题目描述
如果一个三位数等于它自己的每一位数字的立方之和,则称此数为“水仙化数”,如153=13+53+33。给出范围的起止值,输出该范围的水仙花数。
(提示:可使用ctype.h中的函数)

优秀代码

#include <stdio.h>
int main()
{
    int a,b,c,d,e,f;
    scanf("%d%d",&a,&b);
    for(c=a;c<=b;c++)
    {
        if(c>=100 && c<=999) {
            d=c/100;
            e=c%100/10;
            f=c%10;
            if(c==d*d*d+e*e*e+f*f*f)
            {
                printf("%d\n",c);
            }
        }
       }
    return 0;   
}

点评 : 这道题很多人都忽略了一个点。水仙花数是三位数。

F:数组排序

题目描述
定义一个10个元素的整型数组,输入10个整数到数组,对数组排序,然后输出。注意:输出时,每个元素之间以空格相间,但最后一个元素后面没有空格,直接换行。

优秀代码

#include<stdio.h>
#define k 10
int main()
{
    int a[k],i,j,t,n,p,c;
    int flag;
    scanf("%d",&p);
    for(n=0;n<p;n++) {
        for(i=0;i<k;i++)
            scanf("%d",&a[i]);
        for(i=0;i<k;i++) {
            flag=0;
            for(j=0;j<k-1;j++)
                if(a[j]>a[j+1]) {
                    t=a[j];
                    a[j]=a[j+1];
                    a[j+1]=t;
                    flag=1;
                }
            if(flag==0)
                break;
        }
        for(c=0;c<k;c++)
            printf(c==9?"%d\n":"%d ",a[c]);
    }
    return 0;
}

点评:我不管我就喜欢那些看着舒服(缩进到位)的代码。

上一篇 下一篇

猜你喜欢

热点阅读