习题2-1 水仙花数
三位数ABC,范围在100~999,这个三位数满足ABC = A^3 + B^3 + C^3,则称为是水仙花数。
解题思路:
百位、十位、个位分别遍历,判断满足ABC = A^3 + B^3 + C^3则为水仙花数
关键代码:
for(int i = 1; i < 10; i++)
for(int j = 0; j < 10; j++)
for(int k = 0; k < 10; k++)
{
num = i*100 + j*10 + k;
if(num == int((pow(i, 3) + pow(j, 3) + pow(k, 3))))
printf("%d ", num);
}
习题2-2 韩信点兵
要求总人数,只需要将人数分别按3人一排,5人一排,7人一排地排队,每一次看一眼队尾的人数(也就是不能成为一排的人数,即余数),就知道总人数。
给定每种队形排尾的人数a,b,c,求出总人数最小值。(总人数不小于10,不大于100)
解题思路:
依旧是暴力破解,遍历总人数从10到100,总人数满足 i%3==a && i%5==b && i%7==c
关键代码:
for(int i=10; i <= 100; i++)
{
if(i%3==a && i%5==b && i%7==c)
{
printf("%d
", i);
break;
}
if(i==100) printf("No answer
");
}
习题2-3 倒三角形triangle
输入正整数n<=20, 输出n层的倒三角形。例n=5:(实际#号间没有空格)
# # # # # # # # #
# # # # # # # #
# # # # # # #
# # # # # #
# # # # #
# # # #
# # #
# #
#
解题思路:
for(int i=0; i < line; i++)
{
for(int j=i;j >0; j-- ) //用来控制每一行前面的空格,随着函数依次增加
{
printf(" ");
}
for(int k=0; k < 2*(line-i) - 1; k++) //用来控制打印"#"的个数
{
printf("#");
}
printf("
");
}
习题2-4 子序列的和(subsequence)
输入两个正整数,输出 1/n^2 + 1/(n+1)^2 + 1/m^2
关键代码:
for(; n<= m; n++)
{
S += 1.0/(n*n);
}
printf("%.5f
", S);
习题2-5 分数化小数
输入整数a,b,c,输出a/b的小数形式,精确到小数点后c位。
解题思路:
由于自带的浮点运算,算不出指定的小数点后位数。采用计算机去模拟手算的过程。注意最后一位需要根据再往后一位进行四舍五入
while(scanf("%d%d%d", &a, &b, &c) == 3) //scanf返回成功输入的变量个数
{
//if(a && b && c) break;
kase++;
//先输出小数点前的数字
printf("case:%d:%d.", kase, a/b);
a %= b;
//输出小数点后的c-1位
for(i=1;i<c;i++)
{
printf("%d", a*10/b); //注意是没有换行符的
a = a*10%b;
}
//最后一位,四舍五入处理
if(a*10%b*10/b >= 5) //c+1为数据【判断,若大于等于5
printf("%d
", a*10/b+1);
else
printf("%d
", a*10/b);
}
习题2-6 排列(permutation)
用1,2,3,...,9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3。输出满足要求的abc:def:ghi。
int s[10]; //定义一个数组记录1-9出现的次数
for(int i=123; i < 333; i++)
{
for(int m=0; m<10; m++)
{
s[m] = 0;
}
i = i*1; //1倍的数
//分离各位数,用于最后判断每一个数字是否恰好用了一次
s[i/100] = 1;
s[i/10%10] = 1;
s[i%10] = 1;
int j = i*2; //2倍的数
s[j/100] = 1;
s[j/10%10] = 1;
s[j%10] = 1;
int k = i*3; //3倍的数
s[k/100] = 1;
s[k/10%10] = 1;
s[k%10] = 1;
int sum=0;
for(int m=1; m < 10; m++)
sum += s[m];
//等于9,则说明每一个数字都出现一次
if(sum==9) printf("%d %d %d
", i, j, k);
}