C语言笔记6--趣味算法01

1.题目:打印出如下图案(菱形)
打印的效果如下:
这里写图片描述
分析:菱形打印可以分为上下两部分,上半部分4行,下半部分3行。然后分别找出空格、’*’与行的关系。

#include<stdio.h>
#include<stdlib.h>
void main()
{
    int i,j,k;
    for(i=0;i<4;i++)//上4行
    {
        for(j=0;j<3-i;j++)
        {
            printf(" ");
        }
        for(k=0;k<(2*i+1);k++)
        {
            printf("*");
        }
        printf("\n");//换行
    }
    for(i=0;i<3;i++)//下3行
    {
        for(j=0;j<(i+1);j++)
        {
            printf(" ");
        }
        for(k=0;k<(5-2*i))
        {
            printf("*");
        }
        printf("\n");//换行
    }
    system("pause");
}

2.题目:求1+2!+3!+…+20!的和
分析:可以把求一个数的阶乘封装成一个函数,然后通过循环调用这个函数,求出最终值。

#include<stdio.h>
#include<stdlib.h>
//求某个数的阶乘
int jie_c(int num)
{
    int res=1;
    for(int i=1;i<=num;i++)
    {
        res*=i;
    }
    return res;
}
void main()
{
    int res=0;//32位以上足够储存
    int n;
    for(n=1;n<=20;n++)
    {
        res+=jie_c(n);//累加每次返回的阶乘值
    }
    printf("结果是:%d",res);
    system("pause");
}

打印结果为:
这里写图片描述


3.题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程
找出1000以内的所有完数。
分析:利用循环,求出该数的所有因子(不包括本身),然后相加,和原来相等的即是完数。

#include<stdio.h>
#include<stdlib.h>
void wan_shu(int num)
{   
    int i;
    int sum=0;
    for(i=1;i<num;i++)
    {
        if(num%i==0)//余数为0证明是因子
        {
            sum+=i;//因子相加
        }
    }
    if(sum==num)//相等即是完数
    {
        printf("%d\n",num);
    }
}
void main()
{
    int n;
    for(n=1;n<1000;n++)
    {
        wan_shu(n);
    }
    system("pause");
}

打印结果为:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/weixin_40850689/article/details/82144615