注册 登录
编程论坛 C语言论坛

C语言打印图案

Ever0123 发布于 2020-11-12 23:31, 1924 次点击
C语言打印图案该怎么思考(初学者)
9 回复
#2
林月儿2020-11-12 23:52
什么图形,初学者会把问题描述清楚然后写一点解题过程
#3
Ever01232020-11-13 01:24
我的图形问题解决了,能不能帮为看看这道题

输入第一行为一个整数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;
}
#4
林月儿2020-11-13 07:59
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);
#5
rjsp2020-11-13 09:40
以下是引用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 );
    }
}
#6
林月儿2020-11-13 09:46
回复 5楼 rjsp
#7
风过无痕19892020-11-14 12:18
回复 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;
}
#8
Ever01232020-11-17 20:08
回复 7楼 风过无痕1989
非常谢谢你,我好好研究一下,
#9
Ever01232020-11-17 20:10
回复 4楼 林月儿
他也不会,
#10
Ever01232020-11-17 21:05
回复 8楼 Ever0123
我不太明白的是,a=1和a=a+1,这个位置的问题是必要的吗。不太懂,求解,谢谢
1