c - 使用单个 for 循环打印右对齐 # 楼梯案例
问题描述
我想打印一个右对齐的 # Staircase 与单循环。
我试图打印一个右对齐的 # 楼梯。
我做的。但我想用单循环打印相同的内容。
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(i+j>=n-1)
{
printf("#");
}
else
{
printf(" ");
}
}
printf("\n");
}
解决方案
长话短说:有很多方法可以做到这一点。这里有一些我的想法。
递归:
void print(int n, int j) {
if (j < n) {
for (int i = 0; i < n; i++) {
putchar(i + j >= n - 1 ? '#' : ' ');
}
puts("");
print(n, j + 1);
}
}
int main() {
print(10, 0);
return 0;
}
memset
:
#include <stdio.h>
#include <string.h>
int main() {
int i, n = 10;
char s[n+1];
memset(s, ' ', sizeof(char) * (n + 1));
for (i = 0; i <= n; i++) {
memset(s + n - i, '#', sizeof(char) * (n + 1 - i));
s[n+1] = '\0';
printf("%s\n", s);
}
return 0;
}
循环n * n
并使用条件来确定何时打印新行:
int main() {
int i, j, n = 10;
for (i = 0, j = 0; i <= n * n; i++) {
putchar(j++ >= n - 1 ? '#' : ' ');
if (i % n == 0) {
puts("");
j = i / n;
}
}
return 0;
}
goto
:
int main() {
int i = 0, j, n = 10;
loop:
for (j = 0; j <= n; j++) {
putchar(j++ >= n - 1 ? '#' : ' ');
}
puts("");
if (i++ < n) goto loop;
return 0;
}
推荐阅读
- python - 从 Dockerfile 执行的 Python 脚本不会写入 HTML 文件
- swift - 如何为 SwiftUI 中的每个选项卡项设置不同的颜色?
- tomcat - 在 Apache Tomcat 10 上运行 Jakarta EE 9 需要哪些依赖项?
- java - 为什么 notifyDataSetChanged() 将 ListView 向上滚动 android
- java - 使用 Elastic APM 禁用 Spring Boot 项目中方法的自动跨度创建
- sqlalchemy - 为什么 sqlalchemy 的 mypy 插件无法检测到错误的列名?
- php - 如何使用explode返回反向数组
- c - 具有时间限制的 Setsockopt 函数在 C 中无法在 hp non-stop 上运行
- reactjs - React Router 编程嵌套路由不起作用
- python - 将字符串转换为列表元素