谭浩强C++课后习题8——猴子吃桃,计算根号a,输出图案
题目一:猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃了一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半加一个,到第10天早上想再吃时,就只剩一个桃子了。求第1天共摘了多少桃子。
算法思路:设前一天的桃子数位x1,现在的桃子数为x2,根据关系有:x1/2-1=x2,则x2=(x1+1)*2,吃了9天,因此循环9次。
#include<iostream>
using namespace std;
int main() {
int number = 1, day = 9;
for (int i = 0;i < day;i++) {
number = (number + 1) * 2;
}
cout << number << endl;
return 0;
}
运行结果:
题目二:用迭代法求x=根号a。求平方根的迭代公式为:x=(x+a/x)/2,要求前后两次求出的x的差的绝对值小于10^-5。
算法思路:用temp存储上一个x的值,fabs函数是绝对值函数,当fabs(x-temp)>1e-5时结束循环。
#include<iostream>
#include<cmath>
using namespace std;
int main() {
double x, a;
cout << "输入a:";
cin >> a;
x = a / 2;
double temp;
do
{
temp = x;
x = (x + a / x) / 2;
} while (fabs(x-temp)>=1e-5);
cout << x << endl;
return 0;
}
运行结果:
题目三:输出以下图案。
算法思路:先输出前四行再输出后三行,观察得:前四行星号的个数为行号2-1,后三行的行号从1开始,每行星号的个数为7-行号2.
#include<iostream>
using namespace std;
int main() {
for (int i = 1;i <= 4;i++)
{
for (int j = 1;j <= 2 * i - 1;j++)
cout << "*";
cout << endl;
}
for (int i = 1;i <= 3;i++) {
for (int j = 1;j <= 7 - 2 * i;j++)
cout << "*";
cout << endl;
}
return 0;
}
运行结果: