今天做了一种不一样的方法,是用直角坐标系和矩阵的思路打印沙漏,将沙漏创建成一个矩阵,并将其根据对角线分成四块,每块可以由 i 和j 的两条关系式直接表示出来,在数学上感觉比较实用,大家参考下哈!(我是菜鸡,大佬多来指点)(这个是完完全全初学者C++进度的哈,没有引用任何函数、指针,只有数组)
另外,出现段错误多提交几次就好了
#includeusing namespace std; int main() { int n; char c; cin >> n >> c; int shuzi; int biaozhun[40]; int shengyu = 0; for (int i = 1; i < 24; ++i) { biaozhun[i] = 2 * i * i - 1; if (biaozhun[i] <= n && biaozhun[i + 1] > n) { shengyu = n - biaozhun[i]; shuzi = i; } } int m = 2 * shuzi - 1; char arr[m][m]; for (int i = 0; i < m; i++) { for (int j = 0; j < m; j++) { arr[i][j] = { c }; } } for (int i = 0; i < m; i++) { for (int j = 0; j < m; j++) { if (j < i && i + j < m - 1)arr[i][j] = ' '; } } int flag; for (int i = 0; i < m; i++) { for (int j = 0; j < m; j++) { if (j > i && j + i > m - 1)flag = 0; else flag = 1; if (flag)cout << arr[i][j]; } cout << endl; } cout << shengyu; return 0; }
PS:重庆大学大一电气信息8班班长,不知道有没有人能认得出来我T-T
在vs上定义arr[m][m]是不行的,在PTA和dev里面可以。



