V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
station
V2EX  ›  C

C 语言萌新求助,卡住了

  •  
  •   station · 2018-12-10 21:40:52 +08:00 · 3230 次点击
    这是一个创建于 2176 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    FJQ8G4.png

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

    这是我上学的时候考试时候,看到宿舍的小伙伴的答案。。。至今记忆犹新。这个例子时刻提醒着我,答案有一万种可能。:Doge:
    KeepPro
        13
    KeepPro  
       2018-12-11 00:19:53 +08:00
    whoami9894
        14
    whoami9894  
       2018-12-11 00:26:14 +08:00 via Android
    这种打印 v 型,菱形,三角形,重点都不在代码,你把图形的数学表达式写出来再写代码就很容易了
    pkookp8
        15
    pkookp8  
       2018-12-11 00:31:15 +08:00 via Android
    @KeepPro 记得 leetcode 就是有一题第一名就靠穷举把测试用例举完了
    KeepPro
        16
    KeepPro  
       2018-12-11 00:56:29 +08:00
    @pkookp8 嗯嗯,我当时看到这种解法,当时也是惊为天人。不过这种只能算是雕虫小技了 233
    wens07
        17
    wens07  
       2018-12-12 17:32:23 +08:00
    putchar(" *"[f(x, y) == 0]); 这种是什么用法,没见到过,或者要搜什么查看资料
    wens07
        18
    wens07  
       2018-12-13 16:52:42 +08:00
    没人回复,大神能解答下不 @innoink
    wutiantong
        19
    wutiantong  
       2018-12-13 17:05:12 +08:00
    @wens07 f(x,y)==0 返回的 bool 值转为下标值 0/1,前面是个字符串字面量,用下标值从中取出对应 char。
    wens07
        20
    wens07  
       2018-12-13 17:13:37 +08:00
    @wutiantong 哦,了解了,我去 一下没看明白, 前面那个是 str 啊
    wens07
        21
    wens07  
       2018-12-13 17:14:47 +08:00
    @wutiantong 谢谢啊,之前看成 char 了,putchar 啊,我说什么东东
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   937 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 22:20 · PVG 06:20 · LAX 14:20 · JFK 17:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.