问题出在空格怎么控制,

某天,诺诺看到三七二十一(3721)数,觉得很神奇,这种数除以3余2,而除以7则余1。例如8是一个3721数,因为8除以3余2,8除以7余1。现在给出两个整数a、b,求区间[a,b]中的所有3721数,若区间内不存在3721数则输出“none”。
输入格式:

首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试输入两个整数a,b(1≤a输出格式:

对于每组测试,在一行上输出区间[a,b]中所有的3721数,每两个数据之间留一个空格。如果给定区间不存3721数,则输出“none”(引号不必输出)。
输入样例:

2
1 7
1 100
输出样例:

none
8 29 50 71 92

#include
main()
{
int t,a,b,i=1,p=0;
scanf("%d",&t);
for(int i=1;i<=t;i++)
{
scanf("%d %d",&a,&b);
for(int j=a;j<=b;j++)
{
if(j%3==2&&j%7==1)
{
if(p==0)
printf("%d",j);
else printf(" %d",j);
p++;
}
}
printf("\n");
if(p==0)
printf("none\n");
}
return 0;
}

回答:你这个小傻瓜,就不知道先把数据保存起来,到时候挨个取出来不就是了嘛;

img

#include <stdio.h>
#include <stdlib.h>

void cal(int a, int b)
{
    int p = 0;
    for (int j = a; j <= b; j++)
    {
        if (j % 3 == 2 && j % 7 == 1)
        {
            if (p == 0)
                printf("%d", j);
            else printf(" %d", j);
            p++;
        }
    }
    printf("\n");
    if (p == 0)
        printf("none\n");
}

main()
{
    int t, i;
    scanf("%d", &t);
    int* a = (int*)malloc(t * sizeof(int));
    int* b = (int*)malloc(t * sizeof(int));

    for (int i = 0; i < t; i++)
    {
        scanf("%d %d", &a[i], &b[i]);
    }

    for (int i = 0; i < t; i++)
    {
        cal(a[i], b[i]);
    }

    return 0;
}
/*
2
1 7
1 100
*/