算法竞赛入门经典第二章习题解答

来源:互联网 发布:java面向对象总结 编辑:程序博客网 时间:2024/05/22 21:03

2-1

#include <stdio.h>int main(){    int n,count=0;    scanf("%d",&n);    while(n>0)    {        count++;        n/=10;    }    printf("%d\n",count);    return 0;}

2-2

#include <stdio.h>int main(){    int i,ge,shi,bai;    for(i=100;i<1000;i++)    {        ge=i%10;        shi=i/10%10;        bai=i/100;        if(i==ge*ge*ge+shi*shi*shi+bai*bai*bai)            printf("%d\n",i);    }    return 0;}

2-3

#include <stdio.h>int main(){    int a,b,c,i;    scanf("%d%d%d",&a,&b,&c);    for(i=10;i<=100;i++)    {        if(i%3==a && i%5==b && i%7==c)        {            printf("%d\n",i);            return 0;        }    }    printf("No Answer");    return 0;}

2-4

#include <stdio.h>int main(){    int n,i,j,k;    scanf("%d",&n);    for(i=n;i>0;i--)    {        for(k=0;k<5-i;k++)            printf(" ");        for(j=0;j<2*i-1;j++)            printf("#");                 printf("\n");    }    return 0;}

2-6

#include <stdio.h>int main(){    int n,i;    float hn;    scanf("%d",&n);    for(i=1;i<=n;i++)        hn+=1.0/i;    printf("%.3f\n",hn);    return 0;}

2-7

#include <stdio.h>int main(){    int i,t=1;    float sum=0;    for(i=1;;i+=2)    {        if(1.0/i<0.0000001)            break;        sum+=(1.0/i*t);        t*=-1;    }    printf("%.9f\n",sum);    return 0;}

2-8

#include <stdio.h>int main(){    int i,m,n,temp;    scanf("%d%d",&m,&n);    float sum=0;    if(m<n)    {        temp=n;        n=m;        m=temp;    }    for(i=n;i<=m;i++)        sum+=(1.0/i/i);            printf("%.5f\n",sum);    return 0;}
2-9
#include <stdio.h>int main(){    int a,b,c;    scanf("%d%d%d",&a,&b,&c);    printf("%.*f\n",c,a*1.0/b);    return 0;}

解析:

printf的特殊用法:

对于m.n的格式还可以用如下方法表示
char ch[20];
printf("%*.*s\n",m,n,ch);
前边的*定义的是总的宽度,后边的定义的是输出的个数。分别对应外面的参数m和n 。我想这种方法的好处是可以在语句之外对参数m和n赋值,从而控制输出格式。


2-10

#include <stdio.h>void sort(int a[]){    int i,j,temp;    for(i=0;i<9;i++)    {        for(j=0;j<9-i;j++)        {            if(a[j]>a[j+1])            {                temp=a[j];                a[j]=a[j+1];                a[j+1]=temp;            }        }    }}int main(){    int abc,def,ghi,flag,i;    int a[9];    for(abc=123;abc<334;abc++)    {        flag=1;        def=2*abc;        ghi=3*abc;        a[0]=abc/100;a[1]=abc/10%10;a[2]=abc%10;        a[3]=def/100;a[4]=def/10%10;a[5]=def%10;        a[6]=ghi/100;a[7]=ghi/10%10;a[8]=ghi%10;        sort(a);//升序排列        for(i=0;i<9;i++)    //判断排序后数组a是否是1-9        {            if(a[i]!=i+1)            {                flag=0;                break;            }        }        if(flag)            printf("abc=%d,def=%d,ghi=%d\n",abc,def,ghi);    }    return 0;}

0 0
原创粉丝点击