Пример #1
0
int main()
{
	int n, in, i;
	bool flag = true;
	list *stack,*back;
	
	scanf("%d",&n);
	init_stack(&stack);
	back = NULL;
	
	while(n)
	{
		for(i=0 ; i<n ; i++)
		{
			scanf("%d",&in);
			
			/*caso nao seja uma matrioskha, eh possivel que tenha sobrado conteudo na entrada padrao*/
			if(flag)
			{
				/*caso seja o brinquedo que fecha o q esta no topo da pilha*/
				if(back && back->n < 0 &&  back->n == -in)
				{
					pop_back(&stack);
					
					if(!stack_empty(stack))
					{
						back = check_back(&stack);
						back->tam+=in;/*incrementa o tamanho acumulado naquele brinquedo*/
						
						/*caso nao atenda a condicao do tamanho, pare de considerar a leitura*/
						if(back->tam >= -back->n)
							flag  = false;
					}
				}
				else
					push_back(in,&stack);
				
				back = check_back(&stack);
			}
		}
		
		printf("%s\n",(stack_empty(stack))?(":-) Matrioshka!"):(":-( Tente novamente."));
		
		/*reinicializa as variaveis para nova operacao*/
		free_stack(&stack);
		flag = true;
		back = NULL;
		
		scanf("%d",&n);
	}
	
	return 0;
}
int main(int argc, char *argv[]) {
  int i, flag;
  char *cP;

  for(i = 0, flag = 0; i < argc; i++) {
    if (strcmp(argv[i], "--") == 0) {
      printf("\n");
      return (0);
    }
    if (argv[i][0] == '-' && argv[i][1] == '-') {
      if (check_back(i, argv, &(argv[i][2]))) {
	if (flag) {
	  printf(", ");
	}
	printf("%s", &(argv[i][2]));
	flag = 1;
      }
    }
    else if (argv[i][0] == '-') {
      cP = &argv[i][1];
      while(*cP) {
	if (check_back(i, argv, cP)) {
	  if (flag) {
	    printf(", ");	  
	  }
	  printf("%c", *cP);
	  flag = 1;
	}
	cP++;
      }
    }
  }

  printf("\n");

  return (0);
}