9. 三位Armstrong数
题目编号 :Exp02-Basic08,GJBook3-04-12
题目名称:三位Armstrong数
题目描述:编写程序,打印所有3位的Armstrong数,Armstrong数是指其值等于它本身每位数字立方和的数,如153就是一个Armstrong数。153=
输入:无
输出:打印所有3位的Armstrong数,每个Armstrong数间用一个西文空格间隔,最后一个数后无多余字符。
样例:无。详见输入输出说明
#include<iostream>
using namespace std;
int main()
{
int a, b, c;
for(int i=100;i<1000;i++)
{
a = i % 10; //个位
b = i / 10 % 10; //十位
c = i / 100; //百位
if ((a * a * a + b * b * b + c * c * c) == i)
cout << i<<" ";
else continue;
}
return 0;
}
这个题还算比较友好,要注意的两个细节:
1.用(100-1000)之间的数来表示三位数
2.不断取模求 i 的各个数位上的数字
10. 符合条件自然数
题目编号 :Exp02-Basic06,GJBook3-04-09
题目名称:符合条件自然数
题目描述:编写程序,打印所有小于正整数data且可被11整除的自然数。
输入:从键盘输入一个正整数data
输出:输出所有小于data且可被11整除的自然数,数与数之间以一个空格做间隔,最后一个数后无多余字符。
样例1:
输入:50
输出:0 11 22 33 44
样例2:
输入:80
输出:0 11 22 33 44 55 66 77
#include <iostream>
using namespace std;
int main()
{
long long data = 0;
cin >> data;
for (int i = 0;i < data;i+=11)
{
cout << i << " ";
}
return 0;
}
他来了他来了,优美的for循环他来了
观察输出样例,其中包含0,输出结果是11的倍数,在此基础上直接每次加11即可
没必要再写一个if判断i “是否为11的倍数,如果是,则输出” 的语句
11. 计算 e^x
题目编号 :Exp02-Enhance01,GJBook3-04-02
题目名称:计算 e^x
题目描述:请计算上述序列的前101项的和(截止到n取100)
输入:一个浮点数,对应x值。
输出:一个浮点数,即e^x的近似值,小数点后保留到第2位。
注:本题不允许使用math.h头文件和相关的pow和exp等函数。
样例1:
输入:0
输出:1.00
样例2:
输入:4.3
输出:73.70
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
double x = 0, y = 1.00, z = 1.00;
cin >> x;
for (int i = 1.00;i <= 100;i++)
{
z *= x / i;
y += z;
}
cout << fixed << setprecision(2) << y << endl;
return 0;
}
仔细观察这个公式,是不是像极了泰勒展开(串台了)
保险起见,浮点数一律设置为double类型
再回忆一遍C++和C是如何标准输出控制小数点后几位,具体方法是什么
12. 递增排序
题目编号:Exp02-Basic01,GJBook3-03-03
题目名称:递增排序
题目描述:任意三个实数a、b、c,按照从小到大的顺序输出。
输入:输入三个实数(测试数据均只有一位小数)。
输出:按照从小到大顺序输出之前输入的三个实数,以一个西文空格间隔,且每个实数小数点后保留1位。
样例:
输入:
2.3 5.6 1.2
输出:
1.2 2.3 5.6
下面给出了两种方法来排序:
1.“有手就行”法 2.指针数组法(比较推荐)
先看“有手就行”法 ,逻辑倒也清晰,需要较高的观察力和记忆力。a,b,c 共有6中排序方法,不断比较三者之中两者的关系来确定他们的位置,缺点就是只适用于两个或三个数的排序,若数据过多,则复杂度大大增加,就需要用到指针数组法
#include <iostream>
using namespace std;
int main()
{
double a, b, c;
cin >> a >> b >> c;
if (a > b)
{
if (b > c)
cout << c << " " << b << " " << a << endl;
else if(a < c)
cout << b << " " << a << " " << c << endl;
else if((a > c)&&(c > b))
cout << b << " " << c << " " << a << endl;
}
else
{
if (b < c)
cout << a << " " << b << " " << c << endl;
else if ((a < c) && (c < b))
cout << a << " " << c << " " << b << endl;
else if (c < a)
cout << c << " " << a << " " << b << endl;
}
return 0;
}
再来看指针数组法,冒泡排序为一种基础排序类型,需要同学们掌握下面的基础结构
也同样适用于多个数的排序
#include <iostream>
using namespace std;
int main()
{
double arr[3];
for (int i = 0;i < 3;i++)//输入三个数据
{
cin >> arr[i];
}
for (int i = 0;i < 3 - 1 ;i++)//冒泡排序
{
for (int j = 0;j < 3 - 1 - i;j++)
{
if (arr[j] > arr[j + 1])
{
double tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
for (int i = 0;i < 3;i++)//输出打印后的数组
{
cout << arr[i]<<" ";
}
return 0;
}