ACM-白皮书-练习

基础第二弹

虽然是很水的题目,但是还是收获了不少。

动态小数位数

#include <stdio.h>
#include <math.h>
int main()
{
    int a, b, c;
    while(~scanf("%d %d %d", &a, &b, &c))
    {
        printf("%.*lf", c, a/(double)b);
    }
    return ;
}

整数位数

// 整数位数
int cal(int a)
{
    if(a == 0) return 0;
    return (int) log10( (double) a)+1;
}

电灯

#include <stdio.h>
#include <string.h>
#define bool int
//C语言没有bool
bool light[1010];
//C也没有引用
void trans(bool *a)
{
    if(*a)
        *a = ;
    else
        *a = 1;
}
int main()
{
    int i, j;
    int n, k;
    while(~scanf("%d %d", &n, &k))
    {
        memset(light, , sizeof(light));
        for(i = 1; i <= k; i++)
        {
            j = i;
            while(j <= n)
            {
                trans(&light[j]);
                j += i;
            }
        }
        for(i = 1; i <= n; i++)
        {
            if(light[i])
                printf("%d ", i);
        }
        printf("\n");
    }
    return ;
}

蛇型填数

#include <stdio.h>
#include <string.h>
#define bool int
//C语言没有bool
bool light[1010];
//C也没有引用
void trans(bool *a)
{
    if(*a)
        *a = ;
    else
        *a = 1;
}
int main()
{
    int i, j;
    int n, k;
    while(~scanf("%d %d", &n, &k))
    {
        memset(light, , sizeof(light));
        for(i = 1; i <= k; i++)
        {
            j = i;
            while(j <= n)
            {
                trans(&light[j]);
                j += i;
            }
        }
        for(i = 1; i <= n; i++)
        {
            if(light[i])
                printf("%d ", i);
        }
        printf("\n");
    }
    return ;
}

调和级数

#include <stdio.h>
#include <math.h>
double calharmony(int a)
{
    double sum = ;
    int i;
    for(i = 1; i <= a; i++)
    {
        sum += 1/(double)i;
    }
    return sum;
}
int main()
{
    int a;
    while(~scanf("%d", &a))
    {
        printf("%.3lf\n", calharmony(a));
    }
    return ;
}

题目都很水(不能再水了),但是也算是有所收获。学习了一部分C。