原题来自《C++程序设计》第五章习题5.21
曼哈顿距离
#include<iostream>
#include<iomanip> //使用setw的头文件
#include<cmath>
using namespace std;
int main() {
int m;
for (int i = 0; i < 8; i++) {
cout << setw(4 * (7 - i)) << ""; //打出左上三角形的空格,比如第六行,4个空
for (int j = 0; j < 15; j++) {
int sum = 128; //sum只能放置于此,若放置于最外层循环,那么之后每次循环,sum的值是以上一次循环为基础,sum放在这里可以保证每次循环sum初始值都是128
for (int k = 0; k < 8; k++) {
if (abs(i - 7) + abs(j - 7) == k) { //abs(i - 7) + abs(j - 7)是每个点到中心的距离, 横坐标差的绝对值加纵坐标差的绝对值。
m = k; //不能直接用k--,while里m一直减减到0,若是k--,下一次循环,k依然从0开始,在此陷入死循环
while (m--) {
sum /= 2;
}
cout << setw(4) << sum;
}
}
}
cout << endl;
}
return 0;
}