上三角存储后,输出问题还没解决
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define K_N 3
typedef struct L {
char up_k[K_N]; // 存储数据
} L;
int main() {
// 数组
L *l;
l = (L *) malloc(sizeof(L));
printf("上三角:\n");
// 只存上三角
int j = 0, k;
char a;
for (int i = 0; i < K_N; ++i) { // i表示行
k = 0;
while ((a = getchar()) != '\n') {
if (a == ' ' || a == '\n') {
continue;
} else {
if (k < i) { // 上三角存储剩余的角使用 < ;上三角存储剩余的角使用 >
k++;
continue;
} else {
k++;
l->up_k[j] = a;
j++;
}
}
}
}
//输出
for (int i = 0; i < K_N; ++i) { // i表示行
for (int m = 0; m < K_N; ++m) {
if (m < i) {
// 暂未解决 下标的寻找问题
printf("%2c", '0');
//printf("%2c", l->up_k[j]);
} else {
j = (K_N + i + 1) * i / 2 + m - (i * (i + 1))/2;
printf("%2c", l->up_k[j]);
}
}
printf("\n");
}
printf("下三角存储\n");
// 下三角存储
j = 0;
for (int i = 0; i < K_N; ++i) { // i表示行
k = 0;
while ((a = getchar()) != '\n') {
if (a == ' ' || a == '\n') {
continue;
} else {
if (k > i) { // 剩余的角 上三家只需要改为 <
k++;
continue;
} else {
k++;
l->up_k[j] = a;
j++;
}
}
}
}
// 输出的思想是:等差数列
for (int i = 0; i < K_N; ++i) { // i表示行
for (int m = 0; m < K_N; ++m) {
if (m > i) {
j = (1 + m) * m / 2 + i; // 行列相反, 下面
printf("%2c", l->up_k[j]);
} else {
// 求每行数据的位置
j = (1 + i) * i / 2 + m;
printf("%2c", l->up_k[j]);
}
}
printf("\n");
}
return 0;
}