我想打印一个带有单循环的右对齐#楼梯。
我正在尝试打印右对齐的#楼梯。
我做的。
但我想用单循环打印相同的内容。
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(i+j>=n-1)
{
printf("#");
}
else
{
printf(" ");
}
}
printf("\n");
}
答案 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
的合理值,在这种情况下不太可能失败,但是在更大的程序中,建议始终进行检查。