标题:C语言打印图案
只看楼主
Ever0123
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2020-11-12
结帖率:100%
已结贴  问题点数:20 回复次数:9 
C语言打印图案
C语言打印图案该怎么思考(初学者)
搜索更多相关主题的帖子: C语言 打印 图案 思考 
2020-11-12 23:31
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2276
专家分:10647
注 册:2015-3-19
得分:2 
什么图形,初学者会把问题描述清楚然后写一点解题过程

剑栈风樯各苦辛,别时冰雪到时春
2020-11-12 23:52
Ever0123
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2020-11-12
得分:0 
我的图形问题解决了,能不能帮为看看这道题

输入第一行为一个整数T(1<T<5),后边是T组测试数据,每组测试数据包括两行,第一行为一个正整数,第二行为一组正整数,个数不确定,以-1结束。测试数据保证所有整数均可以用int型存储。
输出为T行,每行对应每组测试数据中第一个数在第二行数中的自大而小排序位置。测试数据保证在第二行数据中存在且只存在一个第一个数。

1然后这是同学的答案,我没看懂,求路过的大佬讲解
#include<stdio.h>
int main()
{
    int a,b,c,e,f,j;
    int i=0;
    int d[100000];
    scanf("%d\n",&b);
    for(e=0;e<b;e++)
    {
        scanf("%d",&c);
        do   
        {
            scanf("%d",&d[i]);
            i++;
        }
        while(d[i-1]!=-1);
         a=1;
        for(j=0;j<=i-1;j++)
            {
            f=c-d[j];
            if(f<0)
            a=a+1;
            }
        printf("%d\n",a);
        i=0;
    }
    return 0;
}
2020-11-13 01:24
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2276
专家分:10647
注 册:2015-3-19
得分:6 
do-while循环结束条件是负一,下面的for循环结束索引应该不包括这个-1
循环判断流程是找到测试数据第二行中,大于第一行的个数而不是位置

调整点如下,
程序代码:
     
   for(j=0;j<i-1;j++) {//i-1的位置放的应该是-1,丢弃
        if(d[j]==c)break;//找到就跳出,不一定能找到,感觉怪怪的,怎么说呢,可能要先排序再查找,你可以和你朋友讨论一下
            f=c-d[j];
            if(f<0)
            a=a+1;
         }
        printf("%d\n",a);

剑栈风樯各苦辛,别时冰雪到时春
2020-11-13 07:59
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:6 
以下是引用Ever0123在2020-11-13 01:24:41的发言:

输入第一行为一个整数T(1<T<5),后边是T组测试数据,每组测试数据包括两行,第一行为一个正整数,第二行为一组正整数,个数不确定,以-1结束。测试数据保证所有整数均可以用int型存储。
输出为T行,每行对应每组测试数据中第一个数在第二行数中的自大而小排序位置。测试数据保证在第二行数据中存在且只存在一个第一个数。

这种题目描述不完整,又不肯给出测试样例的,最难办。

程序代码:
#include <stdio.h>

int main( void )
{
    unsigned t;
    scanf( "%u", &t );
    while( t-- )
    {
        int n;
        scanf( "%d", &n );

        unsigned index = 1;
        for( int v; scanf("%d",&v)==1 && v!=-1; )
            index += v>n;
        printf( "%u\n", index );
    }
}
2020-11-13 09:40
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2276
专家分:10647
注 册:2015-3-19
得分:0 
回复 5楼 rjsp

剑栈风樯各苦辛,别时冰雪到时春
2020-11-13 09:46
风过无痕1989
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:8
帖 子:228
专家分:1050
注 册:2020-7-17
得分:6 
回复 3楼 Ever0123
各行语句帮你作了注释
程序代码:
#include<stdio.h>
int main()
{
    int a, b, c, e, f, j;
    int i = 0;
    int d[100000];
    scanf("%d\n", &b);
    for (e = 0;e<b;e++)             // 循环,下面事情做 b 次
    {
        scanf("%d", &c);            // 第一个正整数
        do                          // 为数组 d[100000] 赋值
        {
            scanf("%d", &d[i]);
            i++;
        } while (d[i - 1] != -1);   // 赋值,以-1结束,并记录赋值个数 i - 1
        a = 1;                      // 设置第一个数的初始位置
        for (j = 0;j <= i - 1;j++)  // 遍历数组
        {
            f = c - d[j];           // 第一个数与数组元素进行比较
            if (f < 0)              // 如果第一个数比数组元素小(差 < 0)
                a = a + 1;          // 第一个数在数组中的相对位置加1
        }
        printf("%d\n", a);          // 输出第一个数在数组中的相对位置
        i = 0;
    }
    return 0;
}
2020-11-14 12:18
Ever0123
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2020-11-12
得分:0 
回复 7楼 风过无痕1989
非常谢谢你,我好好研究一下,
2020-11-17 20:08
Ever0123
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2020-11-12
得分:0 
回复 4楼 林月儿
他也不会,
2020-11-17 20:10
Ever0123
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2020-11-12
得分:0 
回复 8楼 Ever0123
我不太明白的是,a=1和a=a+1,这个位置的问题是必要的吗。不太懂,求解,谢谢
2020-11-17 21:05



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-503882-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.129707 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved