《算法竞赛入门经典》第二章习题

习题2-8  输入两个正整数n<m,输出1/n^2+1/(n+1)^2+....1/m^2, 保留5位小数,例如n=2,m=4时为0.42361,n=65536,m=655360时为0.00001
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
	int m,n;
	int i;
	double s=0;
	scanf("%d%d",&n,&m);
	for(i=n;i<=m;i++)
	{
		s+=1.0/i/i; // 1.0/(i*i)会溢出 
	}
	printf("%.5lf",s);
	return 0;
}

注:a,b均未溢出,但a+b、a*b可能溢出,需注意

习题2-9 输入正整数a,b,c输出a/b的小数形式,精确到后c位

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
	int a,b,c;
	scanf("%d%d%d",&a,&b,&c);
	printf("%.*lf",c,(double)a/b); 
	return 0;
}

注:printf的特殊用法,对于m.n的格式可用如下方法表示

       char ch[20];  printf("%*.*s",m,n,ch);

       前面的*定义的是总的宽度,后面的*定义的是输出的个数,分别对应外面的参数m和n。这种方法的好处是可以在语句外     对m,n赋值,控制输出格式。*在printf里可以代表一个泛整数,可以代表任何整数。它可以出现在位宽的位置,也可以出现在小数位数的位置,但在printf引号外,必须要有*对应的数值

习题2-10  排列(permutation):用1,2,3,...,9组成3个三位数abc, def和ghi,每个数字恰好使用一次, 要求abc:def:ghi = 1:2:3。输出所有解。提示:不必太动脑筋。

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
    long int a,b,c,d,e,f,g,h,i,k1,k2,k3;
    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++)
    {
        k1=100*a+10*b+c;
        k2=100*d+10*e+f;
        k3=100*g+10*h+i;
        if((2*k1==k2)&&(3*k1==k3))
          {
              if(a+b+c+d+e+f+g+h+i==45)
               {
                   if(a*b*c*d*e*f*g*h*i==362880)
                   {
                       printf("%5d%5d%5d\n",k1,k2,k3);
                   }
            }
        }
    }
    return 0;
}
/*
在DEV C++中运行结果:
  192  384  576
  219  438  657
  273  546  819
  327  654  981

--------------------------------
Process exited after 2.708 seconds with return value 0
请按任意键继续. . . 
*/
PS:以上编译环境均为DEV C++





阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/w819893168/article/details/79763579
个人分类: Algorithm
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭