#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;
}
2014年11月24日星期一
[UVa] 120 - Stacks of Flapjacks
注意輸出的方式,因為是由底下輸出,要注意變數的換算。
訂閱:
發佈留言 (Atom)
-
因為先前寫UVa時,檔案名稱有時會花心思改,有時就直接把題目名稱加上.cpp就貼上了 導致現在有不同的格式出現 現在要處理的事情很簡單 1. 去除空白 2. 將底線 ( _ ) 換成dash ( - ) 經過一番查詢,終於發現最簡單的方法 - re...
-
文章出處: http://infbugs.blogspot.tw/2011/12/c_20.html 謝謝沙耶,解答了我長久以來對於 input/output 的疑惑。 C 語言入門 - 在線上批改系統練功 如何練習使用基本語法 自己出個練習題試著寫...
-
一開始用數學方法推斷得出,設輸入為n k為在n的前一斜線列數,故只要找到 (1+k)*k/2 < n 的最大k值,即可判定 k%2 == 1 => ((2*n)-(k*k)-k)/2 / ((k*k)+(3*k)-(2*n)+4)/2 k%2 ==...
沒有留言:
發佈留言