station
V2EX  ›  C

C 语言萌新求助,卡住了

  •  
  •   station · Dec 10, 2018 · 3843 views
    This topic created in 2740 days ago, the information mentioned may be changed or developed.

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

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

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

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

    FJQ8G4.png

    21 replies    2018-12-13 17:14:47 +08:00
    minami
        1
    minami  
       Dec 10, 2018
    看样子是要打印一个 V 字,你从上到下打印,把左边越界的不要打印就行了。或者从下到上递归打印,这个留作思考
    billwsy
        2
    billwsy  
       Dec 10, 2018
    试着自己先说一说思路 然后大家可以引导一下?
    innoink
        3
    innoink  
       Dec 10, 2018 via Android
    通用解法:自己建个二维坐标,把图像的函数表达式写出来 f(x,y)=0
    然后两层 for(x...){for(y...){ putchar(" *"[f(x,y)]);}putchar('\n');}
    innoink
        4
    innoink  
       Dec 10, 2018
    重写一下:
    for (x=0; x<...; x++) {
    for (y = 0; y <...; y++) {
    putchar("* "[f(x, y) == 0]);
    }
    putchar('\n');
    }
    innoink
        5
    innoink  
       Dec 10, 2018
    只要建好坐标系,写出 f(x,y)的定义,套进去就行了
    station
        6
    station  
    OP
       Dec 10, 2018
    @billwsy 我想的是用 if 来判断到第三行的时候来输出,并在最后一行前结束
    station
        7
    station  
    OP
       Dec 10, 2018
    @innoink 前面我只是在读语法,基本没写过题。。。。 小本本几下,好好理解下
    innoink
        8
    innoink  
       Dec 10, 2018
    #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  
       Dec 10, 2018
    @station 那就试着写写看 ```if (不到第三行) { 打印一个星号 } else { 打印两个星号 }``` 这样的思路
    billwsy
        10
    billwsy  
       Dec 10, 2018
    @innoink 这个代码很 C 语言=]
    KeepPro
        11
    KeepPro  
       Dec 10, 2018
    printf(" *")
    printf(" *")
    printf(" *")
    printf(" *")
    printf(" *")
    printf(" *")
    KeepPro
        12
    KeepPro  
       Dec 10, 2018   ❤️ 2
    printf(" *")
    printf(" * ")
    printf(" * ")
    printf(" * ")
    printf(" * ")
    printf(" * * ")
    printf(" * * ")
    printf(" * ")
    printf(" ")

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