2011年6月21日 星期二

d166: 反轉表

內容 :
    由1開始之連續數字a1.a2.a3...an相對有一反轉表:b1.b2...bm。其bm代表意思為:數字m的位置前面有幾個比大個個數。
    2 3 6 4 0 2 2 1 0
    第1個2為1前面有2個比它大的數
    第2個3為2前面有3個比它大的數
    第3個6為3前面有6個比它大的數....以此類推
    所以答案為
    5 9 1 8 2 6 4 7 3
    數字1前面有2個比它大的數 5 9
    數字2前面有3個比它大的數 5 9 8

輸入說明 :
    輸入的每一行含有一個由m個數所組成的數列(反轉表) 1<=m<=50,
    單獨一個 -1 在一行代表測試資料的結束

輸出說明 :
    請輸出從 1 到 m 所代表的數列

範例輸入 :
2 3 6 4 0 2 2 1 0
-1

範例輸出 :
5 9 1 8 2 6 4 7 3

提示 :
    背景知識: 陣列練習
    感謝snail修正題目

程式碼 :
#include <stdio.h>
#include <string.h>

int main() 
{
    int i,len=0,n,point,arr[52],flag[52]={0};
    char nouse;
    
    while(scanf("%d%c",&n,&nouse)==2)
    {
        if(n == -1)
            break;
        len++;
        point = 0;
        for(point=i=0;i<n+point+1;i++)
            if(flag[i] == 1)
                point++;
        
        flag[n+point] = 1;
        arr[n+point] = len;
        
        if(nouse == '\n')
        {
            for(i=0;i<len;i++)
            {
                flag[i] = 0;
                printf("%d ",arr[i]);
            }
            printf("\n");
            len = 0;
        }
    }
    return 0;
}


http://zerojudge.tw/ShowProblem?problemid=d166

沒有留言:

張貼留言