原书注:本章题目需用文件输入输出。
习题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
重定向: