1
zodiac1111 2015-09-10 21:02:33 +08:00
我也不懂,但是代码如果格式化一下,应该会有更多人愿意看看.
|
2
vixvix 2015-09-10 21:43:37 +08:00
我试了试,能跑... 你出啥问题了?
|
3
loveis0 OP @vixvix 不是能不能跑的问题,我上面说了呀,想要代码 1 类似于代码 2 那样,输出成一个形状。。。。一座山那样。。。。就需要把最前面的空格,依次递减。。但是就是不知道怎么继续做了。。。
|
4
ho121 2015-09-10 22:19:04 +08:00 via Android
为什么是%c
|
5
CodeCaker 2015-09-10 22:20:33 +08:00
没具体看你的代码。你可以参考一下 printf ("%Ns", str );printf ("%-Ns", str );......这类格式。
|
6
CRVV 2015-09-10 22:23:52 +08:00 1
|
7
zonyitoo 2015-09-10 22:27:44 +08:00
完全没懂你到底要实现什么
|
8
sharpkingdom 2015-09-10 22:32:52 +08:00 1
#include <stdio.h>
int main (int argc, const char * argv[]) { int count = 0; int i = 1; for (; i <= 9; i++) { //printf (" %c",count ); int j = 1; int k = 0; for (;k<(9-i );k++){ printf (" "); } for (; j <= i; j++) { printf ("%i%i*%i=%i ",count,j,i,i*j ); } printf ("\n"); count++; } return 0; } 你看上面代码的结果是不是你想要的。 我是在线编译调试的, https://ganquan.info/g++-compiler/ 大家想编译的话可以使用上面的网址。 |
9
Strikeactor 2015-09-10 22:36:26 +08:00
你要不试试从最后一排开始算,算出一排存一排,最后一起输出
空格数累加,下层字符数减去上层字符数除二就是上层前面需要多加的空格 |
10
sharpkingdom 2015-09-10 22:39:05 +08:00
```c
#include <stdio.h> int main (int argc, const char * argv[]) { int count = 0; int i = 1; for (; i <= 9; i++) { int j = 1; int k = 0; for (;k<(9-i );k++){ printf (" "); } for (; j <= i; j++) { printf ("%i%i*%i=%2i ",count,j,i,i*j ); } printf ("\n"); count++; } return 0; } ``` 上面这个版本貌似对齐了都。关键不在于什么空格依次递减,如何对齐我觉得是关键。 |
12
wezzard 2015-09-10 23:34:44 +08:00
想起一個笑話:「各位高手,我在網上找到一段 python 源代碼,格式已經丟失了,誰能幫我復原一下?」
|
13
loveis0 OP @sharpkingdom 已感谢!!!就是要的是这样的效果。不过每个方程前面多了一个数字=。=我才看到,现在去研究下怎么实现的。。。谢谢高手!!!
|
14
loveis0 OP @ho121 因为我是初学者不太懂,我以为空格这种符号要用%c ,因为%i 不是表示数字吗?
@CodeCaker 你楼下的那位 @sharpkingdom 同志看懂了我的代码,你可以复制下他的看看,应该可以明白我的意思。。。 @CRVV 我就是觉得有趣=。=谢谢 @Strikeactor 作为一个初学者,你光这样说我也不太懂。。。。 |
15
10iii 2015-09-10 23:45:53 +08:00 1
int main (int argc, const char * argv[]) {
int count = 0; for (int i = 1; i <= 9; i++) { for (int x = (9-count );x>0;x--) printf ("\t"); for (int j = 1; j <= i; j++) { printf ("%i*%i=%i\t",j,i,i*j ); } printf ("\n"); count++; } return 0; } |
16
loveis0 OP @sharpkingdom 谢谢,为了我无聊的想法,您辛苦了。要是方便的话可以请您代码每行上加一些注释吗?当然如果不方便就不浪费时间了。只不过我是初学者,很想知道您每一步的具体思维是怎么想的。
|
19
10iii 2015-09-11 00:04:08 +08:00
每行输出前面空上一些格子就好了,算算好空个字符就行了,我用了 tab 偷懒,结果是在有些环境中打印出来的结果可能不是金字塔形,取决于环境对于 tab 的定义是几个空格。
|
21
Tedko 2015-09-11 00:23:03 +08:00
知道 ascii 麽= =。。 c 里面类型,如果你用 int 填%c 的话会当做 ascii 处理吧。。。
http://www.jisuanke.com/course/2 |
23
Strikeactor 2015-09-11 02:01:15 +08:00 1
@loveis0 =_=逼我上图
观察这样一个结构,你可以把它当成一个每层定长的矩形来看,每层由有颜色的部分和两边的空白组成 由于尾部的空白不会影响前面的位置,不管它们,我们只需要让前面的空白把有颜色的部分挤到合适的位置(正中间) 所以只需要一个循环,每次输出一条长度刚刚好的 空白+颜色 第一次产生最底层,获得它的长度是 10 ,存起来,空白长度为 0 ,存起来 第二次产生倒数第二层,获得它的长度是 8 , 10-8=2 ,因为首尾各有一个空白所以这一层的空白增量是 2 的一半 1 ,加上上层的空白长度 0 ,这一层的空白长度为 1 第三次产生倒数第三层,获得它的长度是 6 , 8-6=2 ,因为首尾各有一个空白所以这一层的空白增量是 2 的一半 1 ,加上上层的空白长度 1 ,这一层的空白长度为 2 。。。 依次类推,空白数不断累加 到最后把储存结果的变量 print 出来就是个金字塔了,空格会把字顶到合适的位置 |
24
Tedko 2015-09-11 03:28:35 +08:00
|
25
gyao 2015-09-11 10:54:26 +08:00
#include <stdio.h>
int main (int argc, char *argv[]) { for (int i = 1; i <= 9; i++) { printf ("%.*s", 10 - i, "\t\t\t\t\t\t\t\t\t\t"); for (int j = 1; j <= i; j++) { printf ("%d*%d=%d\t", j, i, i * j ); } printf ("\n"); } return 0; } |
26
loveis0 OP @Strikeactor 非常感谢前辈耐心打字并且告诉我实现的思路(ˉ﹃ ˉ),由于上课的原因抱歉拖到现在才来回复。辛苦前辈啦。♪٩(´ᵕ`๑)۶
|