C 语言萌新求助,卡住了

2018-12-10 21:40:52 +08:00
 station

C 语言一些基础语法和细节也有了一定的了解,于是开始刷书上的题目

最下面注释掉的是最终要打印出来的结果

头脑好乱,画圆圈的地方,不知道该怎么写了

if() 那里写了一点,觉得不对又给删了

3128 次点击
所在节点    C
21 条回复
minami
2018-12-10 21:44:38 +08:00
看样子是要打印一个 V 字,你从上到下打印,把左边越界的不要打印就行了。或者从下到上递归打印,这个留作思考
billwsy
2018-12-10 21:47:19 +08:00
试着自己先说一说思路 然后大家可以引导一下?
innoink
2018-12-10 21:53:00 +08:00
通用解法:自己建个二维坐标,把图像的函数表达式写出来 f(x,y)=0
然后两层 for(x...){for(y...){ putchar(" *"[f(x,y)]);}putchar('\n');}
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');
}
innoink
2018-12-10 21:56:13 +08:00
只要建好坐标系,写出 f(x,y)的定义,套进去就行了
station
2018-12-10 21:56:20 +08:00
@billwsy 我想的是用 if 来判断到第三行的时候来输出,并在最后一行前结束
station
2018-12-10 22:00:29 +08:00
@innoink 前面我只是在读语法,基本没写过题。。。。 小本本几下,好好理解下
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;
}
billwsy
2018-12-10 22:54:34 +08:00
@station 那就试着写写看 ```if (不到第三行) { 打印一个星号 } else { 打印两个星号 }``` 这样的思路
billwsy
2018-12-10 22:59:22 +08:00
@innoink 这个代码很 C 语言=]
KeepPro
2018-12-10 23:39:01 +08:00
printf(" *")
printf(" *")
printf(" *")
printf(" *")
printf(" *")
printf(" *")
KeepPro
2018-12-10 23:42:30 +08:00
printf(" *")
printf(" * ")
printf(" * ")
printf(" * ")
printf(" * ")
printf(" * * ")
printf(" * * ")
printf(" * ")
printf(" ")

这是我上学的时候考试时候,看到宿舍的小伙伴的答案。。。至今记忆犹新。这个例子时刻提醒着我,答案有一万种可能。:Doge:
KeepPro
2018-12-11 00:19:53 +08:00
whoami9894
2018-12-11 00:26:14 +08:00
这种打印 v 型,菱形,三角形,重点都不在代码,你把图形的数学表达式写出来再写代码就很容易了
pkookp8
2018-12-11 00:31:15 +08:00
@KeepPro 记得 leetcode 就是有一题第一名就靠穷举把测试用例举完了
KeepPro
2018-12-11 00:56:29 +08:00
@pkookp8 嗯嗯,我当时看到这种解法,当时也是惊为天人。不过这种只能算是雕虫小技了 233
wens07
2018-12-12 17:32:23 +08:00
putchar(" *"[f(x, y) == 0]); 这种是什么用法,没见到过,或者要搜什么查看资料
wens07
2018-12-13 16:52:42 +08:00
没人回复,大神能解答下不 @innoink
wutiantong
2018-12-13 17:05:12 +08:00
@wens07 f(x,y)==0 返回的 bool 值转为下标值 0/1,前面是个字符串字面量,用下标值从中取出对应 char。
wens07
2018-12-13 17:13:37 +08:00
@wutiantong 哦,了解了,我去 一下没看明白, 前面那个是 str 啊

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/516286

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX