Hit9 Blog Wiki Project Links Archives Resumé
Page: First UP Pre Next Back

基本概念

Fork me on GitHub

允许转载, 但转载请注明出处

Date:2012-08-29

1.给定多项式

A(x)=anxn+an-1xn-1+...+a1x1+a0x0
求多项式在x0处的值,可利用Horner规则:
A(x0)=(...((anx0+an-1)x0+...+a1)x0+a0
Horner规则使多项式求值所需乘法次数最少.写出用Horner规则求值的C程序.

解:code:

float horner(float *a,int m,float x)
{  
    return m?(*a+x*horner(a+1,m-1,x)):0;
}

测试:

#include <stdio.h>
float horner(float *a,int m,float x)
{  
    return m?(*a+x*horner(a+1,m-1,x)):0;
}
int main(int argc, const char *argv[])
{
    float a[3]={1,1,1};
    printf("%f\n",horner(a,3,4));
    return 0;
}

2.给定n个布尔变量,打印出它们的所有的真值组合.比如2的时候有四种可能: (true,false),(false,true),(true,true),(false,flase)

解:两个大致相同的函数都可以:

void foo(int *arr,int n,int m)
{
    if (n==0) {
        int i=0;
        for (i = 0; i < m; i++) {
            printf("%d\t",arr[i]);
        }
        printf("\n");
    }else{
        arr[n-1]=1;
        foo(arr,n-1,m);
        arr[n-1]=0;
        foo(arr,n-1,m);
    }
}
void foo(int *arr,int n,int i)
{
    if (i==n) {
        for (i = 0; i < n; i++) {
            printf("%d\t",arr[i]);
        }
        printf("\n");
    }else{
        arr[i]=1;
        foo(arr,n,i+1);
        arr[i]=0;
        foo(arr,n,i+1);
    }
}

test:

int main(int argc, const char *argv[])
{
    int n=3;
    int arr[n],i;
    for (i = 0; i < n; i++) {
        arr[i]=0;
    }
    foo(arr,n,0);
    return 0;
}

3.给定正整数n,判断n是否等于其所有因子(不包括n,包括1)的总和.

解:

int foo(int m)
{
    int i,sum=0;
    for (i = 1; i < m; i++) {
        if(m%i==0)
            sum+=i;
    }
    return (sum==m)?1:0;
}

test:

int main(int argc, const char *argv[])
{
    int n;
    scanf("%d",&n);
    printf("%d\n",foo(n));
    return 0;
}

Support:mkdwiki