1
minami 2018-12-10 21:44:38 +08:00
看样子是要打印一个 V 字,你从上到下打印,把左边越界的不要打印就行了。或者从下到上递归打印,这个留作思考
|
2
billwsy 2018-12-10 21:47:19 +08:00
试着自己先说一说思路 然后大家可以引导一下?
|
3
innoink 2018-12-10 21:53:00 +08:00 via Android
通用解法:自己建个二维坐标,把图像的函数表达式写出来 f(x,y)=0
然后两层 for(x...){for(y...){ putchar(" *"[f(x,y)]);}putchar('\n');} |
4
innoink 2018-12-10 21:55:24 +08:00
重写一下:
for (x=0; x<...; x++) { for (y = 0; y <...; y++) { putchar("* "[f(x, y) == 0]); } putchar('\n'); } |
5
innoink 2018-12-10 21:56:13 +08:00
只要建好坐标系,写出 f(x,y)的定义,套进去就行了
|
8
innoink 2018-12-10 22:19:17 +08:00
#include <stdio.h>
int f(int x, int y) { if (x < 2) { return y + x - 2; } else { return y - x + 2; } } int main() { int x, y; for (y = 5; y >= 0; y--) { for (x = 0; x < 8; x++) { putchar(" *"[f(x, y) == 0]); } putchar('\n'); } return 0; } |
9
billwsy 2018-12-10 22:54:34 +08:00
@station 那就试着写写看 ```if (不到第三行) { 打印一个星号 } else { 打印两个星号 }``` 这样的思路
|
11
KeepPro 2018-12-10 23:39:01 +08:00
printf(" *")
printf(" *") printf(" *") printf(" *") printf(" *") printf(" *") |
12
KeepPro 2018-12-10 23:42:30 +08:00 2
printf(" *")
printf(" * ") printf(" * ") printf(" * ") printf(" * ") printf(" * * ") printf(" * * ") printf(" * ") printf(" ") 这是我上学的时候考试时候,看到宿舍的小伙伴的答案。。。至今记忆犹新。这个例子时刻提醒着我,答案有一万种可能。:Doge: |
13
KeepPro 2018-12-11 00:19:53 +08:00
|
14
whoami9894 2018-12-11 00:26:14 +08:00 via Android
这种打印 v 型,菱形,三角形,重点都不在代码,你把图形的数学表达式写出来再写代码就很容易了
|
17
wens07 2018-12-12 17:32:23 +08:00
putchar(" *"[f(x, y) == 0]); 这种是什么用法,没见到过,或者要搜什么查看资料
|
19
wutiantong 2018-12-13 17:05:12 +08:00
@wens07 f(x,y)==0 返回的 bool 值转为下标值 0/1,前面是个字符串字面量,用下标值从中取出对应 char。
|
20
wens07 2018-12-13 17:13:37 +08:00
@wutiantong 哦,了解了,我去 一下没看明白, 前面那个是 str 啊
|
21
wens07 2018-12-13 17:14:47 +08:00
@wutiantong 谢谢啊,之前看成 char 了,putchar 啊,我说什么东东
|