为什么这样写每次只能测试一组数据呢

img


img


开关灯问题,为什么这段代码每次只能测试一组数据呢,还有怎么才能减少时间呢

你得在现在的代码块外面再套一层循环。
定义一个测试用例组数变量T,scanf输入T的值,然后用for循环执行T遍代码块就可以测试T组数据了
既然是倍数的灯关闭或打开,你就没有必要用for循环逐个比较,可以用while循环只取倍数值进行比较

#include <stdio.h>
int main()
{
    char lamp[100000] = {0};
    int T,n,k,i,j,c;
    scanf("%d",&T);
    for(i=0;i<T;i++)
    {
        memset(lamp,0,sizeof(lamp));
        scanf("%d%d",&n,&k);
        for(j=1;j<=k;j++)
        {
            c=j;
            while(c<=n)
            {
                if(lamp[c-1] == 1)
                    lamp[c-1] = 0;
                else
                    lamp[c-1] = 1;
                c += j;
            }
        }
        for(j=0;j<n;j++)
            if(lamp[j] == 1)
                printf("%d ",j+1);
        printf("\n");
    }

    return 0;
}