算法竞赛入门经典(刘汝佳)课后习题前三章答案

lauzhishuai lauzhishuai     2022-08-22     216

关键词:

本文转载:

第一章
习题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 <stdio.h>
#include <ctype.h>
#define mod 1000
char s[10000];
char buf[10000];
int main()
{
int i,m=0,n=0,sum=1;
char ch;
while(1)
{
scanf("%c",&ch);
if(ch==EOF||ch==‘ ‘)
{
break;
}
else
{
    s[m++]=ch;
}
}
for(i=0;i<m;i++)
{
if(isdigit(s[i]))
{
buf[n++]=s[i]-‘0‘;
}
}
for(i=0;i<n;i++)
{
sum=sum*buf[i];
}
printf("%d ",sum%mod);
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;
}

拓扑排序((算法竞赛入门经典)刘汝佳)

转载请注明出处:http://blog.csdn.net/u012860063?viewmode=contents【分析】(小白)     把每一个变量看成一个点,“小于”关系看成有向边,则我们得到了一个有向图。这样,我们的任务实际上是把一个图的全部结点... 查看详情

《算法竞赛入门经典(第2版)》pdf下载在线阅读,求百度网盘云资源

《算法竞赛入门经典(第2版)》(刘汝佳)电子书网盘下载免费在线阅读资源链接:链接:https://pan.baidu.com/s/1hn9oYzCM-fjrw649WmvKyg 提取码:6bov  书名:算法竞赛入门经典(第2版)作者:刘汝佳豆瓣评分:8.9出版社:清... 查看详情

算法竞赛入门经典训练指南pdf高清版免费下载

...载备用地址:网盘下载  基本介绍编辑内容简介《算法竞赛入门经典:训练指南》题目多选自近年来ACM/ICPC区域赛和总决赛真题,内容全面,信息量大,覆盖了常见算法竞赛中的大多数细分知识点。书中还给出了所有重要的... 查看详情

如何在原数组的基础上生成树状数组

...典TSP问题中等,状态压缩DP中等中等,树形DP。可参考《算法艺术与信息学竞赛》动态规划一节的树状模型中等,《算法艺术与信息学竞赛》中的习题中等,《算法艺术与信息学竞赛》中的习题中等,《算法艺术与信息学竞赛》... 查看详情

算法竞赛入门经典习题2-10排列(permutation)

习题2-10     用1,2,3。....,9组成3个三位数abc。def和ghi,每一个数字恰好使用一次,要求abc:def:ghi=1:2:3。输出全部解。#include<stdio.h>#include<stdlib.h>#include<string.h>intmain(intargc,char*ar 查看详情

算法竞赛入门经典习题2-6排列(permutation)

暴力解法:1#include<stdio.h>2#include<stdlib.h>34intcompare(constvoid*a,constvoid*b);56intmain(intargc,char**argv){7inti,j,k;8intarr[9];9for(i=100;i<333;i++){10for(j=200;j<666;j++){11for( 查看详情

算法竞赛入门经典_1.5_习题练习

1.温度问题 #include<stdio.h>intmain(){doublef,c;scanf("%lf",&f);c=5*(f-32)/9.0;printf("%.3lf ",c);return0;} 运行结果:2.平均数问题#include<stdio.h>intmain(){inta,b,c;scanf("%d%d%d",&a 查看详情

算法竞赛入门经典题解——第三章3-4周期串uva455(代码片段)

 思路:遍历可能的周期,比较s[k]与s[k%i](其中i为周期)#include<stdio.h>#include<stdlib.h>#include<string.h>intmain()intT;chars[90];scanf("%d",&T);while(T--)scanf("%s",s);intlen,i;len=strlen(s) 查看详情

蛇形填数字(附书上例题答案)

题目来自刘汝佳编著的《算法竞赛入门经典(第二版)》题目描述:在n*n方阵中填入1,2,3,...,n*n要求填成蛇形。例如,n=4时方阵为:10 11 12 1 9 16 13 2 8 15 14 3 7  6  5 4我... 查看详情

竖式问题

题目来自于刘汝佳编著的《算法竞赛入门经典(第二版)》问题描述:找出形如abc*de(三位数乘以两位数)的算式,使得在完整的竖式中,所有数字属于一个特定的数字集合。输入数字集合(相邻数字之间没有空格),输出所有... 查看详情

uvalive3720

题目大意:见刘汝佳《算法竞赛入门经典——训练指南》P173。解题思路:  问题可以转化为求共有多少条过点阵中的点的斜线。其中必定包含左斜线和右斜线,由于点阵式对称的,所以我们只需求出左右斜线中的一种的总数... 查看详情

算法竞赛入门经典第二版第二章习题及思考题(代码片段)

enmmmmmm】 大部分好像除了最后一个思考题都很简单代码如下#include<iostream>#include<cstring>#include<cstdio>#include<cmath>intmain()/*for(inti=100;i<=999;i++)inta=i/100;intc=i%10;intb=(i-a*10 查看详情

uva11038

题目大意:见刘汝佳《算法竞赛入门经典——训练指南》P173解题思路:  求出0到m-1这些数字中0出现的次数(此处要特判m=0的情况),再求出0到n这些数字中0出现的次数,后者减去前者即是答案。  求0到某一个数字这些数... 查看详情

uva11529

题目大意:见刘汝佳《算法竞赛入门经典——训练指南》P173解题思路:  先求出对于每一个点,有多少个三角形包含它,把各个点得到的数值加起来的总和除以C[n][3]即可得出答案。对于每一个点,可以求出有多少个三角形不... 查看详情

猜数字游戏的提示

 题目来自刘汝佳编著的《算法竞赛入门经典(第二版)》题目描述:    我的代码:#include<iostream>#include<cstring>usingnamespacestd;intmain(){intanswer[100];intcopy[100];intenter[100];intn,a,b;intcount= 查看详情

线段树基础

...可以参看杨弋大牛的论文《线段树》以及刘汝佳老师的《算法竞赛入门经典(训练指南)》,代码风格学习hzwer或者notonlysuccess均可。一.单点更新最基础的线段树题目:codevs1080链接:http://codevs.cn/problem/1080/分析:最简单的线段树,单... 查看详情

编程语言难学

刘汝佳写的《算法竞赛入门经典》(第二版)(算法艺术与信息学竞赛),在前言中讲述自己的经历,看完后,我会结合自己,毕竟自己也学过了C语言,编程语言真的难学,还是自己不够努力。他自己3天学了《C语言三日通》,... 查看详情

《算法竞赛入门经典(第二版)》习题解答——第二章(代码片段)

文章目录一、习题2-1水仙花数(daffodil)二、习题2-2韩信点兵(hanxin)三、习题2-3倒三角形(triangle)四、习题2-4子序列的和(subsequence)五、习题2-5分数化小数(decimal)六、习题2-6排列࿰... 查看详情