算法竞赛入门经典习题答案
【篇一:算法竞赛入门经典各章习题答案】
/p> #include stdio.h int main()
{
  }
int a,b,c; double d; sca
nf(%d%d%d,a,b,c); d=(double)(a+b+c); printf(%.3lf\n,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\n,c); return 0;
习题1-3
#include stdio.h int main()
{
  } int n; scanf(%d,n); printf(%d\n,(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\n,sin((pi*n)/180)); printf(%lf\n,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\n,a); return 0;
  1-6
#include stdio.h
int main()
{
  }
int n; scanf(%d,n); if(n%2==0) {  } else {  printf(no\n); } return 0; printf(yes\n);
习题1-7
#include stdio.h
int main()
{
  } int n; double a; scanf(%d,n); a=n*95.0; if(a300) {  } else {  } printf(%.2lf\n,a*0.85); printf(%.2lf\n,a); 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==bb==c) {  } printf(no\n); if((a*a+b*b==c*c)||(a*a+c*c==b*b)||(b*b+c*c==a*a)) {  printf(yes\n);
}
else
{
printf(no\n);  }
return 0;
}
  习题1-10
#include stdio.h
int main()
{
int n;
scanf(%d,n);
if(n%4==0)
{
if(n%100!=0)
{
printf(no\n);}
else
{
if(n%400==0) {
printf(yes\n); }
else
{
printf(no\n); }
}
}
else
{
printf(no\n);  }
return 0;
}
  第二章
习题2-1
#include stdio.h int main() { }  int n,count=0; scanf(%d,n); while(n0) {} count++; n=n/10; printf(%d\n,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\n,i); } return 0;
习题2-3 #include stdio.h int main() {
【篇二:刘汝佳《算法入门经典》答案】
p class=txt>2.double pi=4.0*atan(1.0);这样比较精确。
3.printf(d,m);可以在输出前补充上0,但是换做其他的字符就不可以了。
4.绝对值的输出用%d,如:printf(%d,abs(-10));不可以用%f.
第二章循环结构程序设计
(2011-07-21 21:40:01)[编辑][删除]
标签:  分类: 算法竞赛入门经典
杂谈
1. 调试程序的新方法:ide,gdb .(还没有学会)
2.判断是否是整数 floor(m+0.5)==m.
  1.aabb问题:
法一:列举,然后判断是否是完全平方数,m=1100*a+11*b;  m==floor(m+0.5) 法二:枚举所有的数,然后分离位数,分别判断是否相等。
2.阶乘之和问题:输出结果的后六位
isalpha 函数
printf(%d,s%100000)
3.使用计时器,可以测试程序的效率
#includetime.h
printf(%.2lf,(double)clock()/clocks_per_sec);注意的是,将其放入程序时,测试时会把键盘输入的时间一块算上,而如果不计可以使用命令行测试。
4.文件操作:
(1)输入输出重定向:
#define  local
int main()
{#ifdef local
freopen(data.in,r,stdin);
freopen(data.out,w,stdout);
#endif
.........
}
(2)文件的保存和读取:
int main()
{
file *fin,*fout;
fin=fopen(data.in,rb);
fout=fopen(data.out,wb);
.....
fscanf(fin,%d,a);
fprintf(fout,%d\n,a);
fclose(fin);fclose(fout);
}
第三章:数组和字符串
(2011-07-22 20:27:54)[编辑][删除]
标签:  分类: 算法竞赛入门经典
杂谈
1.当数组需要开的很大的时候,数组a[1000]的定义放到main函数外,否则会异常退出。
2.字符串其实就是数组,所以字符串里的函数在数组里同样适用,如
memset(b,a,sizeof(int)*k):在a中复制k个元素给b,是从首元素开始的。memset(b,a,sizeof(a))把整个全部复制。memset(a,0,sizeof(a)):将a全部初始化为0。
3.开灯问题:
控制等的开关 :if(j%i==0)a[j]=!a[j](之前要调用memset(a,0,sizeof(a)))
4.蛇形填数:
四个循环走:下—左—右—上;外面再套一层循环,控制个数。
5.最长回文:
(1)怎样读取(2)怎样原样输出(3)怎样判断是否是回文
(1)不可以用scanf因为不可以读取空格,fgets(buf,sizeof(buf),stdin),从标准输入流中读取,
也可以从文件中读取,但此时读取的是一整行。
字符操作函数:isalpha,isdigital,isprint,
isupper,islower,toupper,tolower,他们的返回值都是int 型。
(2)读取以后为了方便要把所有的字符转换成大写,但是要原样输出,所以要重新定义一个数组存放之前地字符串,并且设置一个数组存放他在原来字符串中的位置。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。