c - 在 c 中打印回文钻石
问题描述
我试图根据用户的输入生成回文钻石。例如,如果用户输入 = 3,则生成的模式将是:
1
121
12321
121
1
但是,我当前的代码正在生成:
1
121
12321
1234321
123454321
我对出了什么问题有所了解,但我对如何改变它已经没有想法了。任何人都可以提供一些见解吗
#include<stdio.h>
int main(void) {
int n, i, j;
printf("Enter an integer: ");
scanf("%d", &n);
int rows = n*2-1;
int spaces = n-1;
for(i=1; i<=rows; i++) {
for(j=1; j<=spaces; j++)
printf(" ");
for (j=1; j<=i; j++)
printf("%d", j);
for (j=i-1; j>=1; j--)
printf("%d", j);
if (i<n) {
spaces--;
} else {
spaces++;
}
printf("\n");
}
return 0;
}
解决方案
错误:
您正在对第一行执行正确的操作,但随后您将继续相同的事情(对于结构的下一部分),而不是反转下一部分的逻辑。
逻辑:
因此,对于第一部分使用一个 for 循环,对结构的第二部分使用另一个 for 循环。
代码:
#include <stdio.h>
int main() {
int n = 0, i = 0, j = 0;
printf("Enter an integer: ");
scanf("%d", &n);
int rows = n, spaces = n - 1;
for(i = 1; i <= rows; i++) {
for(j = 1; j <= spaces; j++)
printf(" ");
for (j = 1; j <= i; j++)
printf("%d", j);
for (j = i - 1; j >= 1; j--)
printf("%d", j);
spaces--;
printf("\n");
}
spaces = 1;
for(i = rows - 1; i >= 1; i--) {
for(j = 1; j <= spaces; j++)
printf(" ");
for (j = 1; j <= i; j++)
printf("%d", j);
for (j = i - 1; j >= 1; j--)
printf("%d", j);
spaces++;
printf("\n");
}
return 0;
}
推荐阅读
- javascript - react hook useffect如何仅在json数据更改时触发?
- google-analytics - 如何合并来自同一 URL 的 2 个谷歌分析标签
- progressive-web-apps - Workbox StaleWhileRevalidate 和离线回退
- javascript - 通过不同的键对对象数组进行分组
- python - Python PyGame 中的 Simon 游戏项目 - 循环模式?
- javascript - 当用户使用相同的设备返回时如何保持用户登录?
- javascript - 在 fetch 方法上调用 POST 方法时出错
- javascript - 为什么 === 运算符不能正常工作?
- api - 我们可以使用 API 密钥从 Dialogflow 代理访问数据吗?
- php - 递归对象实例化(在 PHP 中)?