算法第四版第一章课后作业

元旦喝酒误事啊!女神把我删了,这下回归贤者模式,闲着不如努力,趁假期把算法看一下,坑爹的教务系统让我选不上数据结构的课,只能自学了,每一个代码小菜鸡也许都觉得当自己代码写的牛逼了以后,女神自然会有的,嗯!一定是这样的,加油,奥利给

1.1.9

进制转换的问题,我现在的思路就是模仿数学方法,用循环模拟短除,代码如下

#include 
#include 

int main()
{
    int n;//待输入的十进制数n
    int n_2[1000];//转换后存放数组
    scanf("%d",&n);
    int i=0;
    while(n>0)
    {
        n_2[i]=n%2;
        n=n/2;
        i++;
    }
    for(i=i-1;i>=0;i--)
    {
        printf("%d",n_2[i]);
    }
    return 0;
}

实际上代码的问题是很大的,首先并不符合题目要求打印spring类型的值s,这个可以写一个类型转换的函数将int转换成spring。
另外n_2数组大小是有限的,存在一定的限制,今天有点晚了,明天再干。

1.1.20

编写递归的静态方法计算ln(N!)的值,递归的方法肯定是用在计算阶乘上啦,然后用math库算一下对数。

#include 
#include 
#include 
double log_recursion(int n);//调用阶乘,再执行一步取对数
int recursion(long int n);//阶乘计算函数

int main()
{
    int n;
    scanf("%d",&n);
    double nn=log_recursion(n);
    printf("%lf",nn);
    return 0;
}

double log_recursion(int n)
{
    double temp = recursion(n);
    double nn = log(temp);
    return nn;
}

int recursion(long int n)
{
    if(n==1)
        return 1;
    else
        return n*recursion(n-1);
}

1.1.30

数组练习,连gcd都得自己写啊,C还真是什么都得自己来,自己动手丰衣足食!
ifTrue函数判断i,j两个数是否互质,并返回相应的布尔值(True为1,False为0),中间调用了gcd函数,用欧几里得算法求i,j的最大公约数,如果返回值大于1,那么他们不互质 。

#include 
#include 

int ifTrue(int i,int j)
{
    if(i==0||j==0||i==1||j==1)
    {
        return 1;
    }
    else
    {
        if(gcd(i,j)>1)
            return 0;
        else
            return 1;
    }
}
int gcd(int a,int b)
{
    if(a<b)
    {
        int temp=b;
        b=a;
        a=temp;
    }
    while(a%b)
    {
        int r = a%b;
        a=b;
        b=r;
        r=a%b;
    }
    return b;
}

int main()
{
    int n;
    scanf("%d",&n);
    unsigned int a[n][n];
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            a[i][j]=ifTrue(i,j);
        }
    }
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            printf("%2d",a[i][j]);
        }
        printf("\n");
    }
    return 0;
}

你可能感兴趣的:(算法第四版C语言实现)