c - 如何以特定的三角形打印数组?
问题描述
我有一个包含十个元素的数组{a, b, c, d, e, f, g, h, i, j}
。我想像这样打印它:
一种 是 cfh dgij
请注意,第一列由我的数组的前四个值组成。第二列(从第二行开始)由数组的下三个值组成,依此类推。
我的代码如下
#include <stdio.h>
#define size 10
int main() {
int arr[size] = {14, 22, 34, 57, 44, 42, 33, 55, 48, 47};
int i, j, n, c, maxTemp;
n = 4;
maxTemp = 1;
c = n - 1;
for (i = 0; i < n; i++) {
for (j = i; j < maxTemp; j = j + c) {
printf("%d ", arr[j]);
}
if (maxTemp <= size) {
maxTemp = maxTemp + c + 1;
}
printf("\n");
}
return 0;
}
对于数组
int arr[size] = {14, 22, 34, 57, 44, 42, 33, 55, 48, 47};
我期望
14 22 44 34 42 55 57 33 48 47
但得到:
14 22 44 34 42 48 57 33 47 13
这里可能会发生这种情况,因为变量c
值没有减少
,因为我想将c
' 值减少一。我试过但无法弄清楚。
解决方案
让我们看看你想要的索引,它们是
0
1 4
2 5 7
3 6 8 9
用线性数字填充空格(我们只是稍后不打印它们)
0 (3 5 6)
1 4 (6 7)
2 5 7 (8)
3 6 8 9
根据所需的模式,索引通过列上升。
这给出了与 的线性关系i
,即索引将被计算涉及i + ...
部分。
每一列(包括“()”内的填充值)都以高于前一列最后一个数字的值开头,或多或少高出n
.
但开始较低(即使用前一列中的一些值),以匹配第一个空(填充)行。
这给出了与 的线性关系j*n
,即会有... + j*n
。
让我们试试,这里的索引为i+j*n
.
0 4 8 12
1 5 9 13
2 6 10 14
3 7 11 15
这些太高了,在每行中为0、1、3、6。
例如,查看最后一行
3-0==3 7-1==6 11-3==8 15-6==9
那就是j*(j+1)/2
。
顺便说一句,我自己没有找到这个,所以我用我最喜欢的搜索引擎搜索了字面意义上的“0、1、3、6”;这突然出现:
https ://www.mathsisfun.com/algebra/triangular-numbers.html
放在一起,正确的索引是:
i+j*n - j*(j+1)/2
在代码中:
#include<stdio.h>
#define size 10
int main(void) {
int arr[size] = {14, 22, 34, 57, 44, 42, 33, 55, 48, 47};
int i, j, n=4;
for (i = 0; i < n; i++)
{
for (j = 0; j < i+1; j++)
{
printf("%d ", i+j*n - j*(j+1)/2 );
}
printf("\n");
}
return 0;
}
输出:
0
1 4
2 5 7
3 6 8 9
推荐阅读
- html - CSS - 给李加边框
- reactjs - 只有当所有请求都完成时,React fetch 才会从回调中获取响应
- c# - 基于语言一对多关系实体框架的查询
- javascript - 在向下钻取 highchart 上添加 url
- css - Google 在 Search Console 上报告的移动可用性问题
- bash - 来自变量的 Bash 注入
- python - 有没有办法向熊猫数据框添加新列,将新列的每个唯一值附加到数据框的每个现有行?
- java - Java/JSP log4j:WARN 请正确初始化log4j系统
- corda - 为什么corda需要共识,因为corda是被许可的区块链
- sql - 声明日期和所选日期不匹配