使用单个for循环打印右对齐的#楼梯案例

时间:2019-01-05 01:35:52

标签: c

我想打印一个带有单循环的右对齐#楼梯。

我正在尝试打印右对齐的#楼梯。
我做的。 但我想用单循环打印相同的内容。

for(i=0;i<n;i++)
{
    for(j=0;j<n;j++)
    {
        if(i+j>=n-1)
        {
          printf("#");
        }
        else
        {
          printf(" ");
        }
    }
    printf("\n");
}

2 个答案:

答案 0 :(得分:2)

长话短说:有很多方法可以做到这一点。这是我的脑袋。

递归:

 editComment.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        final int DRAWABLE_LEFT = 0;
        final int DRAWABLE_TOP = 1;
        final int DRAWABLE_RIGHT = 2;
        final int DRAWABLE_BOTTOM = 3;

        if(event.getAction() == MotionEvent.ACTION_UP) {
            if(event.getX() >= (editComment.getRight() - editComment.getCompoundDrawables()[DRAWABLE_RIGHT].getBounds().width())) {
                // your action here

             return true;
            }
        }
        return false;
    }
});

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

答案 1 :(得分:1)

只要viewModel.removeProduct = function (product) { viewModel.products.remove(function(item){ return item.id === product.id; }); } 标记的字符串足够长(至少from PyQt5 import QtCore, QtWidgets, uic class Principal(QtWidgets.QMainWindow): def __init__(self): super(Principal, self).__init__() uic.loadUi("we.ui",self) self.setAttribute(QtCore.Qt.WA_TranslucentBackground, True) self.setAttribute(QtCore.Qt.WA_NoSystemBackground, False) self.setWindowFlags(QtCore.Qt.FramelessWindowHint) self.frame1.installEventFilter(self) self._animation = QtCore.QPropertyAnimation(self.frame2, b'size', self) self._animation.setStartValue(QtCore.QSize(0, self.height())) self._animation.setEndValue(QtCore.QSize(121, self.height())) self._animation.setDuration(200) def eventFilter(self, watched, event): if self.frame1 is watched: if event.type() == QtCore.QEvent.Enter: self._animation.setDirection(QtCore.QAbstractAnimation.Forward) self._animation.start() elif event.type() == QtCore.QEvent.Leave: self._animation.setDirection(QtCore.QAbstractAnimation.Backward) self._animation.start() return super(Principal,self).eventFilter(watched, event) if __name__ == '__main__': import sys app = QtWidgets.QApplication(sys.argv) p = Principal() p.show() sys.exit(app.exec_()) 个),就可以使用:

#

格式字符串中的n标记的意思是“从参数列表中读取for (i = 0; i < n; i++) printf("%*.*s\n", n, i+1, "##########"); ”-例如,参见POSIX规范printf()或C11规范{{ 3}}。例如,符号*的意思是“打印一个宽度为10个字符,右对齐,左侧填充空白且字符串参数不超过6个字符的字段”。因此,如果int"%10.6s\n",则循环的工作方式如下:

n

您可以尝试以下代码:

10

或者:

printf("%10.1s\n", "##########");    // 9 blanks, 1 hash
printf("%10.2s\n", "##########");    // 8 blanks, 2 hashes
…
printf("%10.9s\n", "##########");    // 1 blank, 9 hashes
printf("%10.10s\n", "##########");   // 0 blanks, 10 hashes

或者:

#include <stdio.h>

int main(void)
{
    int n = 10;

    for (int i = 0; i < n; i++)
        printf("%*.*s\n", n, i + 1, "##########");

    return 0;
}

后两个将处理#include <stdio.h> #include <string.h> int main(void) { int n = 10; char data[n + 1]; memset(data, '#', n); data[n] = '\0'; for (int i = 0; i < n; i++) printf("%*.*s\n", n, i + 1, data); return 0; } 大于#include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { int n = 10; char *data = malloc(n + 1); memset(data, '#', n); data[n] = '\0'; for (int i = 0; i < n; i++) printf("%*.*s\n", n, i + 1, data); free(data); return 0; } 的值,没有任何问题。如图所示,第一个不会(但是可以很容易地适应n的中等值)。请注意,中间一个使用VLA(可变长度数组)。这是C99的强制功能,也是C11和C18的可选功能。最后一个应该检查10是否成功。对于n的合理值,在这种情况下不太可能失败,但是在更大的程序中,建议始终进行检查。