如何更改I / O的格式?

时间:2017-01-24 14:07:14

标签: c algorithm input

输入格式:输入的第一行给出输入字符串的数字(不含空格,最大长度为100) 并以小写形式)。然后是n行,每行包含一个字符串。

输出格式:N行输出,换行后面的每行都有YES或NO。 (如果字符串是魔方回文,则为YES,否则为NO)

示例输入: 4

satorarepotenetoperarotas

ABA

ABBA

abcabacba

示例输出:

NO

所以我写了下面的代码。但是在我的程序中,输出在输入后立即显示,一次只输入一个。

PS:如果您对如何提高代码效率有任何建议,请在答案中添加。谢谢

#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{   int num_input,l;
    scanf("%d",&num_input);
    for(l=0;l<num_input;l++)
    {
    char str[100];
    char i = 0;
    int sq,j,k;
    scanf("%s", str);
    while(str[i]!='\0')
    {
        ++i;

    }

    sq = sqrt(i);
    if(i== sq*sq)
    {
    if(i%2==0)
    {
        for(j=0;j<=i/2;j++)
        {
            if((str[j]==str[i-j-1])&&(str[j+sq]==str[i-j-sq-1]))
            {
                if(j==i/2)
                {
                    printf("YES\n");
                }           
            }
            else
            {   if(j==i/2)
                {
                        printf("NO\n");
            }
            }
        }
    }

    if(i%2!=0)
    {
        for(k=0;k<=i/2;k++)
        {
            if((str[k]==str[i-k-1])&&(str[k+sq]==str[i-k-sq-1]))

                {   if(k==i/2)
                {
                    printf("YES\n");    
                }}

            else
                {if(j==i/2)
                {
                printf("NO\n");
                }}

        }
    }
    }
    else
    {
        printf("NO\n");
    }
    }
    return 0;

}

1 个答案:

答案 0 :(得分:0)

“混合”输出和输入的问题是由于每次计算需要一个字符串这一事实引起的。如果你想扫描整个输入,然后显示输出,你应该......做到这一点。如果你知道将输入多少个字符串,那么如何做到这一点很简单:

使用int num_input; scanf("%d",&num_input);扫描字符串数后,您可以创建一个大小为[num_input][max_str_length]的二维字符数组。从您的代码中,我假设每个字符串的最大长度为100(给定char str[100];)。

然后,在for循环中,循环num_input次,您应该扫描所有字符串并将它们放在2D数组中的适当位置。这样,您的输入就会被存储并准备好通过算法进行检查。我鼓励你,而不是在main函数内编写简单的算法,创建一个函数,它将获取一个数组,它的大小作为参数,并在给定数组包含时返回true1一个字符串,它是一个“魔术方形回文”或当它不是时返回false / 0。如果你这样做,你可以再次循环num_input次并在当前检查的数组上调用你的函数。每次fucntion返回true时,输出“YES”,否则输出“NO”/

如果您对2D阵列和/或自己制作功能一无所知,我建议您购买一本好的C书,或者简单的谷歌一些教程,因为这些东西非常基本且相当容易理解。 / p>