为什么下面的代码没有正确扫描所有输入?

时间:2016-07-13 05:12:01

标签: c

此代码是给定问题的解决方案: https://www.hackerearth.com/international-women-hackathon-2016/algorithm/jp-and-rotations/

问题是在我将m操作作为样本输入中指定的R 1,L 2,L 1低于其他值后,它不再需要任何进一步输入并直接将输出打印为2,我无法得到我在这里做错了,请帮帮我。

bool withinscope(int num, int begin, int end){
    if(num > begin && num < end)
        return true;
    return false;
}

1 个答案:

答案 0 :(得分:-1)

尝试在scanf语句中的格式说明符后删除空格。 它不会给你正确的最终输出。但是,我认为这是你需要知道的。

试试这段代码:

#include <stdio.h>
#include<malloc.h>
struct node
{
    unsigned long int data;
    struct node *next, *prev;
};
int main()
{
    int n, m, a, count = 0, i, j;
    char rot;
    scanf("%d %d", &n, &m);
    struct node *head1 = NULL, *rear1 = NULL, *ptr = NULL, *temp = NULL, *head2 = NULL, *rear2 = NULL;
    if (head1 == NULL)
    {
        temp = (struct node*)malloc(sizeof(struct node));
        scanf("%ld", &temp->data);
        temp->next = NULL;
        head1 = temp;
        ptr = head1;
        head1->prev = NULL;
    }
    for (i = 1; i <= n - 1; i++)
    {
        temp = (struct node*)malloc(sizeof(struct node));
        scanf("%ld", &temp->data);
        ptr->next = temp;
        temp->prev = ptr;
        ptr = temp;
        temp->next = NULL;
    }
    ptr->next = head1;
    head1->prev = ptr;
    rear1 = ptr;
    temp = NULL;
    ptr = NULL;
    fflush(stdout);
    fflush(stdin);
    if (head2 == NULL)
    {
        temp = (struct node*)malloc(sizeof(struct node));
        scanf("%ld", &temp->data);
        temp->next = NULL;
        head2 = temp;
        ptr = head2;
        head2->prev = NULL;
    }
    for (i = 1; i <= n - 1; i++)
    {

        temp = (struct node*)malloc(sizeof(struct node));
        scanf("%ld", &temp->data);

        ptr->next = temp;
        temp->prev = ptr;
        ptr = temp;
        ptr->next = NULL;
    }
    ptr->next = head2;
    head2->prev = ptr;
    rear2 = ptr;
    ptr = NULL; temp = NULL;
    fflush(stdout);
    fflush(stdin);
    for (i = 0; i<m; i++)
    {
        scanf("%c %d", &rot, &a);
        fflush(stdout);
        fflush(stdin);
        if (rot == 'L')
        {
            ptr = head1;
            for (j = 0; j<a; j++)
            {
                temp = ptr->next;
                rear1->next = ptr;
                ptr->prev = rear1;
                rear1 = ptr;
                head1 = temp;
                ptr = head1;
            }
            count++;
            ptr = NULL;
            temp = NULL;
            if (head1->data == head2->data && rear1->data == rear2->data)
            {
                break;
            }
        }
        else if (rot == 'R')
        {
            temp = head1;
            ptr = rear1->prev;
            for (j = 0; j<a; j++)
            {
                temp->prev = rear1;
                rear1->prev->next = NULL;
                rear1->next = temp;
                head1 = rear1;
                temp = head1;
                rear1 = ptr;
                ptr = rear1->prev;
            }
            count++;
            temp = NULL;
            ptr = NULL;
            if (head1->data == head2->data && rear1->data == rear2->data)
            {
                break;
            }
        }
    }
    printf("%d", count);
    return 0;
}