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

本文提供了算法竞赛入门经典第2章的习题解答,包括位数计算、水仙花数、韩信点兵问题、倒三角形绘制、统计数值、求和计算、π的近似计算、子序列和、分数转小数以及数字排列问题。通过这些习题,读者可以提升C语言编程和算法解决实际问题的能力。
摘要由CSDN通过智能技术生成

原书注:本章题目需用文件输入输出。


习题2-1 位数

输入一个不超过10的9次方的正整数,输出它的位数。例如:12735的位数是5,。请不要使用任何数学函数,只用四则运算和循环语句实现。

重定向:

#include<stdio.h>
int main()
{
freopen('xt2-1.in', 'r', stdin);
freopen('xt2-1.out', 'w', stdout);
int i, m, n;
while(scanf('%d', &n) == 1)
{
m = 0;
for (i = 1; i <= 1000000000; i *= 10)
if (n / i > 1) m++;
printf('%d\n', m);
}
return 0;
}
fopen:
#include<stdio.h>
int main()
{
	FILE *fin, *fout;
	fin = fopen("xt2-1.in", "rb");
	fout = fopen ("xt2-1.out", "wb");
	//freopen("xt2-1.in", "r", stdin);
	//freopen("xt2-1.out", "w", stdout);
	int i, m, n;
	while(fscanf(fin,"%d", &n) == 1)
	{
	m = 1;
	for (i = 1; i <= 1000000000; i *= 10)
		if (n / i > 1) m++;
	fprintf(fout,"%d\r\n", m);

	}
	fclose(fin);
	fclose(fout);
	return 0;
}


习题2-2 水仙花数

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

重定向:

#include<stdio.h>
int main()
{
	int i, a, b, c;
	//freopen("xt2-2.in", "r", stdin);
	freopen("xt2-2.out", "w", stdout);
	for (i = 100; i <= 999; i++)
		{
			a = i/100;
			b = i/10 - a*10;
			c = i - a*100 -b*10;
			//printf ("i=%d a=%d b=%d c=%d\n", i, a, b, c);
			if (i == (a*a*a + b*b*b + c*c*c)) printf("%d\n",i);
		}
	return 0;
}


fopen:

#include<stdio.h>
int main()
{
	int i, a, b, c;
	//freopen("xt2-2.in", "r", stdin);
	//freopen("xt2-2.out", "w", stdout);
	FILE *fout;
	fout = fopen("xt2-2.out", "wb");
	for (i = 100; i <= 999; i++)
		{
			a = i/100;
			b = i/10 - a*10;
			c = i - a*100 -b*10;
			//printf ("i=%d a=%d b=%d c=%d\n", i, a, b, c);
			if (i == (a*a*a + b*b*b + c*c*c)) fprintf(fout,"%d\r\n",i);
		}

	fclose(fout);
	return 0;
}



习题2-3 韩信点兵

相传韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排、五人一排、七人一排地变换队形,而他每次只掠一眼队伍的排尾就知道总人数了。输入3个非负整数a,b,c,表示每种队形排尾的人数(a<3,b<5,c<7),输出总人数的最小值(或报告无解)。已知总人数不小于10,不超过100.

样例输入:2 1 6

样例输出:4 1

样例输入:2 1 3

样例输出:No answer

重定向:


                
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值