2014年11月24日星期一

[UVa] 120 - Stacks of Flapjacks


 注意輸出的方式,因為是由底下輸出,要注意變數的換算。 
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int main(){

  int cakes[50];
  memset(cakes,0,sizeof(cakes));
  char input[1000];
  memset(input,'\0',sizeof(input));

  while(fgets(input,sizeof(input),stdin)!=NULL){ //讀取一整行
    int cake_num = 0; //蛋糕數 初始化
    for(int i=0;i<sizeof(input);i++){ //將input列中的個別數字轉換為整數存入cakes
       if(input[i]>='0' && input[i]<='9'){
         int tmp = input[i]-'0';
         cakes[cake_num] = cakes[cake_num]*10;
         cakes[cake_num] += tmp;
       }
       if(input[i]==' ')cake_num++; //遇到空格,蛋糕數++
    }

    for(int i=0;i<=cake_num;i++)printf("%d ",cakes[i]);
    printf("\n");
 
   
    int n = cake_num; // n為計算還沒處理的cakes,在n以下的cakes都已經完成排序
    while(n){
      int max = 0;
      int max_flag=0; //最大值旗標
      for(int i=0;i<=n;i++){
        if(cakes[i] >= max){ //找出最大值其位置(flag)
          max = cakes[i];
          max_flag = i;
        }
      }
      if(max_flag==n){ //如果最底下的就是最大值,則查找範圍往上縮減
        n--; //縮減
        max = 0;
        max_flag = 0;
      }else if(max_flag==0 || cakes[0]==cakes[max_flag]){ //如果最大值在最上面或最大值和最上面相等,則直接全部翻轉
        int top=0, buttom=n; 
        while(1){
          if(top >= buttom)break;
          int tmp = cakes[top]; //交換Pie
          cakes[top] = cakes[buttom];
          cakes[buttom] = tmp;
          top++; buttom--;
        }
        printf("%d ",cake_num-n+1);
        n--; //最大值已翻轉到最下面,往上縮減範圍
      }else{
        int top=0, buttom=max_flag; //將最大值以上的翻轉
        while(1){
          if(top >= buttom)break;
          int tmp = cakes[top]; //交換Pie
          cakes[top] = cakes[buttom];
          cakes[buttom] = tmp;
          top++; buttom--;
        }
        printf("%d ",cake_num-max_flag+1);
        //n--; //縮減 
      }
   }
   printf("0\n");    
   // for(int i=0;i<=cake_num;i++)printf("%d ",cakes[i]);
   // printf("\n");
    memset(cakes,0,sizeof(cakes));
    memset(input,'\0',sizeof(input));  
  }
   
  return 0;
} 

沒有留言: