zoukankan      html  css  js  c++  java
  • 【经验总结】算法竞赛入门经典(刘汝佳)课后习题前三章答案(补充了3-3题,可供参考)

    本文转载(3-3自己补充,可供参考):

    第一章
    习题1-1
    #include <stdio.h>
    int main()
    {
    int a,b,c;
    double d;
    scanf("%d%d%d",&a,&b,&c);
    d=(double)(a+b+c);
    printf("%.3lf ",d/3.0);
    return 0;
    }

    习题1-2
    #include <stdio.h>
    int main()
    {
    int f;
    double c;
    scanf("%d",&f);
    c=5*(f-32)/9;
    printf("%.3lf ",c);
    return 0;
    }

    习题1-3
    #include <stdio.h>
    int main()
    {
    int n;
    scanf("%d",&n);
    printf("%d ",(n*(1+n))/2);
    return 0;
    }

    习题1-4
    #include <stdio.h>
    #include <math.h>
    #define pi 4.0*atan(1.0)
    int main()
    {
    int n;
    scanf("%d",&n);
    printf("%lf ",sin((pi*n)/180));
    printf("%lf ",cos((pi*n)/180));
    return 0;
    }

    习题1-5
    #include <stdio.h>
    int main()
    {
    double x1,y1,x2,y2,a;
    scanf("%lf %lf %lf %lf",&x1,&y1,&x2,&y2);
    a=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
    printf("%lf ",a);
    return 0;
    }

    习题1-6
    #include <stdio.h>
    int main()
    {
    int n;
    scanf("%d",&n);
    if(n%2==0)
    {
    printf("YES ");
    }
    else
    {
    printf("NO ");
    }
    return 0;
    }

    习题1-7
    #include <stdio.h>
    int main()
    {
    int n;
    double a;
    scanf("%d",&n);
    a=n*95.0;
    if(a<300)
    {
    printf("%.2lf ",a);
    }
    else
    {
    printf("%.2lf ",a*0.85);
    }
    return 0;
    }

    习题1-8
    #include <stdio.h>
    #include <math.h>
    int main()
    {
    double n;
    scanf("%lf",&n);
    printf("%.2lf",fabs(n));
    return 0;
    }

    习题1-9
    #include <stdio.h>
    int main()
    {
    int a,b,c;
    scanf("%d%d%d",&a,&b,&c);
    if(a==b&&b==c)
    {
    printf("no ");
    }
    if((a*a+b*b==c*c)||(a*a+c*c==b*b)||(b*b+c*c==a*a))
    {
    printf("yes ");
    }
    else
    {
    printf("no ");
    }
    return 0;
    }

    习题1-10
    #include <stdio.h>
    int main()
    {
    int n;
    scanf("%d",&n);
    if(n%4==0)
    {
    if(n%100!=0)
    {
    printf("no ");
    }
    else
    {
    if(n%400==0)
    {
    printf("yes ");
    }
    else
    {
    printf("no ");
    }
    }
    }
    else
    {
    printf("no ");
    }
    return 0;
    }


    第二章

    习题2-1

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

    习题2-2
    #include <stdio.h>
    int main()
    {
    int a,b,c;
    for(int i=100;i<=999;i++)
    {
    a=i%10;
    b=i/10%10;
    c=i/100;
    if(i==a*a*a+b*b*b+c*c*c)
    {
    printf("%d ",i);
    }
    }
    return 0;
    }

    习题2-3
    #include <stdio.h>
    int main()
    {
    int i,a,b,c;
    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 ",i);
    }
    }
    if(i==101)
    {
    printf("no answer ");
    }
    return 0;
    }

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

    printf("#");
    }
    printf(" ");
    }
    return 0;
    }

    习题2-5
    文件题,南邮竞赛基本不涉及。。。
    习题2-6
    #include <stdio.h>
    int main()
    {
    int i,n;
    double sum=1.0;
    scanf("%d",&n);
    for(i=2;i<=n;i++)
    {
    sum+=(1.0/i);
    }
    printf("%.3lf ",sum);
    return 0;
    }

    习题2-7
    #include <stdio.h>
    #include <math.h>
    int main()
    {
    int t=-1;
    double a=1.0,sum=1.0;
    while(fabs(a)>=0.000001)
    {
    a=1.0/(a+2);
    a=a*t;
    sum=sum+a;
    t=t*(-1);
    }
    printf("%.9lf ",sum);
    return 0;
    }

    习题2-8
    #include <stdio.h>
    int main()
    {
    int i,n,m,temp;
    double sum=0;
    scanf("%d%d",&n,&m);
    if(n>m)
    {
    temp=n;
    n=m;
    m=temp;
    }
    for(i=n;i<=m;i++)
    {
    sum=sum+(1.0/i/i);
    }
    printf("%.5lf ",sum);
    return 0;
    }

    习题2-9
    printf的特殊用法:对于m.n的格式可以用如下方法表示
        char ch[20];
        printf("%*.*s ",m,n,ch);
        前边的*定义的是总的宽度,后边的定义的是输出的个数。分别对应外面的参数m和n 。 这种方法的好处是可以在语句之外对参数m和n赋值,从而控制输出格式。 
    #include <stdio.h>
    int main()
    {
        int a,b,c;
    scanf("%d%d%d",&a,&b,&c);
    printf("%.*lf ",c,(double)a/b);
    return 0;
    }

    习题2-10

    #include <stdio.h>
    int main()
    {
        int a,b,c,d,e,f,g,h,i;
    for(a=1;a<=9;a++)
    {
    for(b=1;b<=9;b++)
    {
    for(c=1;c<=9;c++)
    {
    for(d=1;d<=9;d++)
    {
    for(e=1;e<=9;e++)
    {
    for(f=1;f<=9;f++)
    {
    for(g=1;g<=9;g++)
    {
    for(h=1;h<=9;h++)
    {
    for(i=1;i<=9;i++)
    {
    if((2*(a*100+b*10+c)==1*(d*100+e*10+f))&&(3*(a*100+b*10+c)==1*(g*100+h*10+i))&&(a!=b)&&(a!=c)&&(a!=d)&&(a!=e)&&(a!=f)&&(a!=g)&&(a!=h)&&(a!=i)&&(b!=c)&&(b!=d)&&(b!=e)&&(b!=f)&&(b!=g)&&(b!=h)&&(b!=i)&&(c!=d)&&(c!=e)&&(c!=f)&&(c!=g)&&(c!=h)&&(c!=i)&&(d!=e)&&(d!=f)&&(d!=g)&&(d!=h)&&(d!=i)&&(e!=f)&&(e!=g)&&(e!=h)&&(e!=i)&&(f!=g)&&(f!=h)&&(f!=i)&&(g!=h)&&(g!=i)&&(h!=i))
    {
    printf("%d,%d,%d ",a*100+b*10+c,d*100+e*10+f,g*100+h*10+i);
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    return 0;
    }




                                    第三章
    习题3-1

    #include <stdio.h>
    #include <string.h>
    int main()
    {
    int i,a[101],n,max;
    memset(a,sizeof(a),0);
    while(scanf("%d",&n)==1)
    {
    a[n]++;
    }
    max=a[0];
    for(i=1;i<101;i++)
    {
    if(a[i]>=max)
    {
    max=a[i];
    }
    }
    for(i=0;i<101;i++)
    {
    if(a[i]==max)
    {
    printf("%d ",i);
    }
    }
    printf(" ");
    return 0;
    }



    习题3-2

    #include <stdio.h>
    #include <ctype.h>
    char s[1000];
    int main()
    {
    char ch;
    int i,j,m=0,sumlong=0,count=0;
    while(1)
    {
    scanf("%c",&ch);
    if(ch==' '||ch==EOF)
    {
    break;
    }
    else
    {
    s[m++]=ch;
    }
    }
    for(i=m-1;i>0;i--)
    {
    if(s[i]==' '&&s[i-1]==' ')
    {
    for(j=i-1;j<m-1;j++)
    {
    s[j]=s[j+1];
    }
    m--;
    }
    }
    for(i=0;i<m;i++)
    {
    if(isalpha(s[i]))
    {
    sumlong++;
    }
    else if(s[i]==' ')
    {
    count++;
    }
    }
    printf("%.2lf ",(double)((sumlong+count+1)/(count+1)));
    return 0;
    }


    题3-3(该题自己补充可以参考)

    #include <iostream>
    #include <cctype>
    #include <math.h>
    #include <iomanip>
    using namespace std;
    char ch_a[100];
    int i_b[100];
    int main()
    {
    //1.首先输入数据存储到字符数组中以空格代表结束,判断是数字还是字母(0~9 ASCII码48~57)
    char ch;
    int i=0;
    int n=0;
    int sum=1;

    while(1)
    {
    scanf("%c",&ch);
    if (ch ==' '|| ch ==EOF)//输入结束
    {
    //处理最后一个数据,最后一个数据是以回车结尾的
    for (int j = 0;j<i;j++)//判断是数字还是字符串
    {
    if (ch_a[j]<'0'||ch_a[j]>'9')
    {
    //不是数字
    i = 0;
    break;
    }
    else if (j == i-1 && (ch_a[j] >= '0'&& ch_a[j] <= '9'))//判断到最后一个了,是一个整数
    {
    //此时需要转换数据,存储到新的整数数组中
    for (int temp_j = i-1;temp_j >= 0;temp_j--)
    {
    i_b[n] += (ch_a[temp_j]-'0')*pow(10.0,(i-1) - temp_j);
    }
    n++;
    i = 0;
    }
    }
    //end of最后一个数据处理
    break;
    }
    else if (ch == ' ')//输入空格,代表一个完整的数据输入完成,此时需要判断该数据的类型
    {
    for (int j = 0;j<i;j++)//判断是数字还是字符串
    {
    if (ch_a[j]<'0'||ch_a[j]>'9')
    {
    //不是数字
    i = 0;
    break;
    }
    else if (j == i-1 && (ch_a[j] >= '0'&& ch_a[j] <= '9'))//判断到最后一个了,是一个整数
    {
    //此时需要转换数据,存储到新的整数数组中
    for (int temp_j = i-1;temp_j >= 0;temp_j--)
    {
    i_b[n] += (ch_a[temp_j]-'0')*pow(10.0,(i-1) - temp_j);
    }
    n++;
    i = 0;
    }
    }
    }
    else //存储数据,继续输入
    {
    ch_a[i++] = ch;
    }

    }

    //此时所有整数数据都存储到i_b[]数组中了
    for (int temp_j2 = 0; temp_j2<n;temp_j2++)
    {
    sum *= i_b[temp_j2];
    }
    cout<<setw(3)<<setfill(' ')<<right << sum % 1000 << endl;
    return 0;
    }

    习题3-4

















    习题3-5
    #include <stdio.h>
    char a[1000][1000];
    int main()
    {
    int i,j,n;
    scanf("%d",&n);
    scanf(" ");
    char temp;
    for(i=0;i<n;i++)
    {
    for(j=0;j<n;j++)
    {
    scanf("%c",&a[i][j]);
    }
    }
    for(i=0;i<n;i++)
    {
    for(j=i;j<n;j++)
    {
    temp=a[i][j];
    a[i][j]=a[j][i];
    a[j][i]=temp;
    }
    }
    for(i=n-1;i>=0;i--)
    {
    for(j=0;j<n;j++)
    {
    printf("%c ",a[i][j]);
    }
    printf(" ");
        }
    return 0;
    }

    习题3-6
    #include <stdio.h>
    int main()
    {
    int b,n,m=0;
    char p[100];
    scanf("%d%d",&b,&n);
    while(b!=0)
    {
    p[m++]=b%n+'0';
    b=b/n;
    }
    for(int i=m-1;i>=0;i--)
    {
    printf("%c",p[i]);
    }
    printf(" ");
    return 0;
    }

    习题3-7
    #include <stdio.h>
    int ndjc(int n,int m)
    {
    int i,a=1;
    for(i=0;i<n;i++)
    {
    a*=m;
    }
    return a;
    }
    int main()
    {
    int i,b,n,p[100],m=0,a=0;
    scanf("%d %d",&n,&b);
    while(n>0)
    {
    p[m++]=n%10;
    n=n/10;
    }
    m--;
    for(i=m;i>=0;i--)
    {
    a+=p[i]*ndjc(i,b);
    }
    printf("%d ",a);
    return 0;
    }

  • 相关阅读:
    ResNet主要思想(总结)
    TensorFlow2_200729系列---24、一些卷积网络创新点
    Android GIS开发系列-- 入门季(1) 起点
    [官方]Beyond Compare里面 二进制比较的含义.
    Chrome 下载地址
    本地图文直接复制到网页编辑器中
    本地图文直接复制到在线编辑器中
    js+php分片上传大文件源码
    js+php分片上传大文件插件
    js+php分片上传大文件控件
  • 原文地址:https://www.cnblogs.com/lauzhishuai/p/6391304.html
Copyright © 2011-2022 走看看