您的位置:首页 > 其它

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

2014-09-01 20:54 260 查看
习题2-1 位数

输入一个不超过10^9的正整数,输出它的位数。

#include<stdio.h>

#include<stdlib.h>

int main()

{

int n,d=0;

scanf("%d",&n);

while(n>0)

{

n=n/10;

d++;

}

printf("%d\n",d);

system("pause");

return 0;

}

习题2-2 水仙花数

输出100-999中的所有水仙花数。若3位数ABC满足ABC=A^3+B^3+C^3,则称其为水仙花数。

#include<stdio.h>

#include<stdlib.h>

int main()

{

int a,b,c;

for(a=1;a<=9;a++)

for(b=0;b<=9;b++)

for(c=0;c<=9;c++)

if(a*a*a+b*b*b+c*c*c==a*100+b*10+c)

printf("%d%d%d\n",a,b,c);

system("pause");

return 0;

}

习题2-3 韩信点兵

输入3个非负整数a,b,c,表示每种队形的人数,(a<3,b<5,c<7),输出总人数的最小值(或报告无解)。已知总人数不小于10,不超过100.

样例输入:2 1 6

样例输出:41

样例输入:2 1 3

样例输出:No answer

#include<stdio.h>

int main()

{

int a,b,c,n;

while(scanf("%d%d%d",&a,&b,&c)!=EOF)

{

for(int i=10;i<=100;i++)

if(i%3==a&&i%5==b&&i%7==c)

{

n=i;

printf("%d\n",n);

break;

}

else

printf("No answer");

}

return 0;

}

习题2-4倒三角

输入正整数N<=20,输出一个n层的倒三角。例如输入n=5,输出

#########

#######

#####

###

 #

#include<stdio.h>

int main()

{

int n,i,j,count;

while(scanf("%d",&n)!=EOF)

{

count=2*n-1;

for(i=0;i<n;i++){

for(j=0;j<i;j++) printf(" ");

for(j=0;j<count;j++) printf("#");

printf("\n");

count=count-2;

}

}

return 0;

}

习题2-5统计

输入一个正整数n,然后读取n个正整数a1,a2,a3,...,an,最后再读取一个正整数m。统计a1,a2,a3,...,an,中有多少个整数的值小于m 。

#include<stdio.h>

#include<stdlib.h>

int main()

{

int n,m,count=0;

int a[1000];

scanf("%d",&n);

for(int i=0;i<n;i++)

{

scanf("%d",&a[i]);

}

scanf("%d",&m);

for(int i=0;i<n;i++){

if(a[i]<m)

count++;

}

printf("%d\n",count);

system("pause");

return 0;

}

习题2-6 调和级数

输入正整数n,输出H(n)=1+1/2+1/3+...+1/n的值,保留3位小数。

#include<stdio.h>

int main()

{

int n;

double s=0.0;

while(scanf("%d",&n)!=EOF)

{

for(int i=1;i<=n;i++){

s=s+1.0/i;}

printf("%.3lf\n",s);

}

return 0;

}

习题2-7 近似计算

计算 /4=1-1/3+1/5-1/7+....,直到最后一项小于10^-6.

#include<stdio.h>

#include<stdlib.h>

int main()

{

double sum=0;

for(int i=0; ;i++)

{

double t=1.0/(2*i+1);

if(i%2==0)

sum+=t;

else

sum-=t;

if(t< 1e-6)

break;

}

printf("%.6lf\n",sum);

system("pause");

return 0;

}

习题2-8 子序列的和

输入两个正整数n<m<10^6,输出1/n^2+1/(n+1)^2+...+1/m^2,保留5位小数。

#include<stdio.h>

#include<stdlib.h>

int main()

{

int n,m,i;

double s=0;

scanf("%d %d",&n,&m);

for(i=n;i<=m;i++)

s+=1.0/i/i;

printf("%.5lf\n",s);

system("pause");

return 0;

}

习题2-9 分数化小数

输入正整数a,b,c,输出a/b的小数形式,精确到小数点后c位。a,b<=10^6,c<=100.

#include<stdio.h>

#include<stdlib.h>

int main()

{

int a,b,c;

scanf("%d %d %d",&a,&b,&c);

printf("%d.",a/b);

a=a%b;

while(c--)

{

a=a*10;

int q=a/b;

if(c==0&&(a%b)*10/b>=5)

q++;

printf("%d",q);

a%=b;

}

printf("\n");

system("pause");

return 0;

}

习题2-10 排列

用1,2,3……,9组成3个三位数abc,def,ghi.每个数字恰好使用一次,要求abc:def:ghi=1:2:3.输出所有的解。

#include<stdio.h>

#include<stdlib.h>

int main()

{

int x,y,z,a[10]={0};

for(x=100;x<333;x++)

{

y=2*x;

z=3*x;

a[x/100]=a[x/10%10]=a[x%10]=1;

a[y/100]=a[y/10%10]=a[y%10]=1;

a[z/100]=a[z/10%10]=a[z%10]=1;

int i,s=0;

for(i=0;i<10;i++)

s+=a[i];

if(s==9)

printf("%d\t%d\t%d\n",x,y,z);

for(i=0;i<10;i++)

a[i]=0;

}

system("pause");

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: