10773:ゼロ


質問する



コード#コード#

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

#define STACK_LEN 100000

typedef int Data;

typedef struct stack{
    Data stackArr[STACK_LEN];
    int topIndex;
}Stack;

void stackInit(Stack * pstack); // init
void SPush(Stack * pstack, Data data); //push
void SPop(Stack * pstack); // pop

int main(void)
{
    int num;
    int sum=0;
    int newNum;
    //스택생성,초기화
    Stack stack;
    stackInit(&stack);

    scanf("%d",&num);
    for(int i=0;i<num;i++)
    {
        scanf("%d",&newNum);
        if(newNum!=0)
        {
            SPush(&stack, newNum);
            
        }else
        {
            SPop(&stack); //빼기
        }
    }
    for(int i=0;i<=stack.topIndex;i++)
    {
        sum+=stack.stackArr[i];
    }
    
    printf("%d\n",sum);
    return 0;
}

void stackInit(Stack * pstack)
{
    pstack->topIndex = -1; //빈상태
}


void SPush(Stack * pstack, Data data)
{
    pstack->stackArr[++(pstack->topIndex)] = data; // 데이터 저장
}

void SPop(Stack * pstack)
{
    pstack->topIndex -= 1;
}

解説


これはPUSHとPOPを適用する問題です.
0以外の数字がpushで、0を入力した場合、topIndexにある値がポップアップされます.
最初の実行時にエラーが発生したので、新しく作成したコードは上の最初のコードです...
実行時に現れる原因を解析したところ,スタックの長さに起因することが分かった.ああ...ははは
元のコードでもう一度見て、最初よりも優れた性能を示しました.
次のはもともと作成されたコードです!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define STACK_LEN 100000
int sum=0;
typedef int Data;

typedef struct stack{
    Data stackArr[STACK_LEN];
    int topIndex;
}Stack;

void stackInit(Stack * pstack); // init
int SIsEmpty(Stack * pstack); // empty

void SPush(Stack * pstack, Data data); //push
void SPop(Stack * pstack); // pop
Data SSum(Stack * pstack);

int main(void)
{
    int num;

    int newNum;
    //스택생성,초기화
    Stack stack;
    stackInit(&stack);

    scanf("%d",&num);
    for(int i=0;i<num;i++)
    {
        scanf("%d",&newNum);
        if(newNum!=0)
        {
            SPush(&stack, newNum);
            
        }else
        {
            SPop(&stack); //빼기
        }
    }
//    for(int i=0;i<=stack.topIndex;i++)
//    {
//        sum+=stack.stackArr[i];
//    }
    
    printf("%d\n",SSum(&stack));
    return 0;
}

void stackInit(Stack * pstack)
{
    pstack->topIndex = -1; //빈상태
}


void SPush(Stack * pstack, Data data)
{
    pstack->stackArr[++(pstack->topIndex)] = data; // 데이터 저장
}

void SPop(Stack * pstack)
{
    pstack->topIndex -= 1;
}
//
Data SSum(Stack * pstack)
{
    for(int i=0;i<=pstack->topIndex;i++)
    {
        sum+=pstack->stackArr[i];
    }
    return sum;
}